sed和gawk

sed和gawk

gawk

  •  gawk -F: '{print $1; print $0}' /etc/passwd:显示 /etc/passwd 中每一行的第一个字段,其中字段以:分割;接着打印每一行的所有字段。如果不使用文件而是用文本可以使用Ctrl+D来输出EOF表示文本结束。
  • gawk -F: -f script.gawk /etc/passwd:如果需要执行的命令过多,可以使用 -f 指定一个包含对应命令的文件。


上例中给出了一个script.gawk的例子,其中使用BEGIN和END来在文本输出之前和之后添加注释文本。

sed

  • sed -e 's/brown/green; s/dog/cat/' data.txt:-e 用于指定多个须执行的命令,其实现了将 data.txt 中的每一行第一个brown和dog替换为green和cat。如果需要执行多个命令,同样可以使用 -f 指定一个文件。如果需要指定模式匹配的地方可以使用 ‘s/pattern/replacement/flags’其中flags(n:表示位置;g:所有地方;p:打印匹配行的原始内容;w file:将匹配结果输入到另一个文件中);而 -n 将只显示匹配上的行
  • sed 's/\/bin\/bass/\/bin\/csh/' /etc/passwd:改变用户的默认shell,可以使用!作为分隔符(sed 's!/bin/bash!/bin/csh!' /etc/passwd)
  • 如要指定作用的行,可以在s前面使用 2;2,$;/partten/ 来指定。比如 sed '2s/dog/cat/' data.txt 或者 sed '2,$s/dog/cat/' data.txt 或者 sed '/test/s/dog/cat/' data.txt
  •  其他操作包括 /d:删除;i\:指定行前增加新行;a\:指定行后增加新行;c\:修改行;y/:转换命令(sed 'y/123/789/' data.txt:将data.txt中的所有1换成7,2换成8……)
  • sed '2,$w test.txt' data.txt:将data.txt中的第2行之后的所有行写入test.txt文件中
  • sed '/number 2/r data.txt' test.txt:将data.txt中的内容插入到test.txt中包含number 2文本匹配行之后
  • 多行sed命令:实现了在data.txt中查找number 4字符串,并只输出匹配行的原字符串,且在输出前输出对应行的行号


猜你喜欢

转载自blog.csdn.net/a40850273/article/details/80631176