阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

文本处理三剑客(grep,sed,awk)

191次阅读
没有评论

共计 2105 个字符,预计需要花费 6 分钟才能阅读完成。

Linux 文本处理三剑客:

grep: 文本过滤工具

grep  egrep=grep -e  fgrep

sed:流编辑器  处理多个行

awk: 文本编辑工具,格式化工具

grep [OPTIONS] PATTERN [FILE…] :

文本处理搜索工具,根据用户指定的“模式”对目标文本进行匹配检查;打印匹配到的行

选项:

  • –color=auto: 对匹配到的文本着色显示
  • -v: 显示不被 pattern 匹配到的行
  • -i: 忽略字符大小写
  • -n: 显示匹配的行号
  • -c: 统计匹配的行数
  • -o: 仅显示匹配到的字符串
  • -q: 静默模式,不输出任何信息
  • -A #: after, 显示匹配到的行和后 #行
  • -B #: before, 显示匹配到的行和前 #行
  • -C #:context, 显示匹配到的行和前后各 #行
  • -e: 实现多个选项间的逻辑 or 关系。grep –e‘cat’-e‘dog’file
  • -w: 整行匹配整个单词
  • -E: 使用扩展正则表达式
  • -F: 相当于 fgrep,不支持正则表达式

grep 命令使用简单实例
1. 显示所有以 d 开头的文件中包含 test 的行

$ grep‘test’d*

2. 显示在 aa,bb,cc 文件中匹配 test 的行。

$ grep‘test’aa bb cc

3. 显示所有包含每个字符串至少有 5 个连续小写字符的字符串的行。

$ grep‘[a-z]\{5\}’aa

4. 如果 west 被匹配,则 es 就被存储到内存中,并标记为 1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个 es(\1),找到就显示该行。

$ grep‘w\(es\)t.*\1′ aa

如果用 egrep 或 grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。

# 有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c>,然后再试。

sed   [options]‘command’file(s)

sed [options] -f scriptfile file(s)

sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一 个或多个文件, 简化对文件的反复操作, 编写转换程序等

-n   不输出模式空间中的内容到屏幕
-e  多点编辑   可以在一个 sed 命令中  同时处理多个脚本
-f  每行一个编辑命令  sed 脚本
-r   支持扩展的正则表达式
-l   直接编辑原文件
地址定界:
1. 空地址:对全文进行处理
2. 单地址:
#:指定行;
/pattern/: 被此模式所匹配到的行;注意 / / 双斜线必须写  这是格式要求

3. 地址范围:
#,#
#,+#
#,/pat1/
/pat1/,/pat2/
4. 步进:(隔一行编辑)
1-2:所有的奇数行

2-2:所有的偶数行

编辑命令:
d: 删除
p:  显示模式空间中的内容
a:\text:在行后面追加文本“text”, 支持使用 \n 实现多行追加
l:\text: 在行前面插入文本“text”, 支持使用 \n 实现多行插入(转义)
c:\text: 把匹配到的行替换为此处指定的文本“text”(替换一整行而不是某一个)O
w: /PATH/TO/SOMEFILE: 保存模式空间到的行至指定的文件中
r 把一个文件下的内容添加到所读的文件中去  文件合并
比如  sed‘3r /etc/fstab /etc/passwd
把 /passwd 这个文件添加到   /fastab 中   从第三行开始
=:为模式匹配到的行打印行号
!:条件取反  相当于 ^
地址定界!编辑命令
s///: 查找替换,其分隔符可自行指定,常用的有 s@@@,s### 等
替换标记:
g: 全局替换
w /PATH/HOMEFILE : 将替换成功的结果保存至指定文件中
p:显示替换成功的行

高级编辑命令:
h: 把模式空间中的内容覆盖至保持空间中
H: 把模式空间中的内容追加至保持空间中
g: 把保持空间中的内容覆盖至模式空间中
G:把保存空间中的内容追加至模式空间中
x: 把模式空间中的内容与保持空间中的内容互换
n: 覆盖读取匹配到的行下一行至模式空间中
N:追加读取匹配到的行下一行至模式空间中
d: 删除模式空间中的行
D:删除多行模式空间中的所有行
示例
sed -n‘n;p FILE : 显示偶数行
sed‘1!G;h;$!d’FILE : 逆序显示文件中的内容
sed‘$!d FILE:取出最后一行
sed‘$!N;$!D’FILE : 显示文件的后两行
sed’/^$/d;G FILE : 删除原有的所有的空白行 而后为每一行后面都加上空白行
sed‘n;d’FILE : 显示奇数行
sed‘G’FILE:在原有的每行后方添加一个空白行

注意:
sed -i 是直接修改原文件,不是在模式空间 慎重 慎重 慎重

awk 是一个强大的文本分析工具,相对于 grep 的查找,sed 的编辑,awk 在其对数据分析并生成报告时,显得尤为强大。简单来说 awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-12-03发表,共计2105字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中