本文主要是介绍第19章 sed和gawk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
sed
命令会用斜线间指定的第二个文本字符串来替换第一个文本字符串模式。在本例中是big test替换了test。
sed编辑器并不会修改文本文件的数据。它只会将修改后的数据发送到STDOUT。如果你查看原来的文本文件,它仍然保留着原始数据。
要在sed命令行上执行多个命令时,只要用-e选项就可以了。
$ sed -e 's/brown/green/; s/dog/cat/' data1.txt
两个命令都作用到文件中的每行数据上。命令之间必须用分号隔开,并且在命令末尾和分号
之间不能有空格。
也可以这样
$ sed -e
> s/brown/green/
> s/fox/elephant/
> s/dog/cat/' data1.txt
有大量要处理的sed命令,那么将它们放进一个单独的文件中通常会更方便一些。可以在sed命令中用-f选项来指定文件。
$ cat script1.sed
s/brown/green/
s/fox/elephant/
s/dog/cat/
$
$ sed -f script1.sed data1.txt
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
$
gawk程序脚本用一对花括号来定义。你必须将脚本命令放到两个花括号( {})中。
$ gawk '{print "Hello World!"}'
如果你输入一行文本并按下回车键, gawk会对这行文本运行一遍程序脚本。跟sed编辑器一
样, gawk程序会针对数据流中的每行文本执行程序脚本。由于程序脚本被设为显示一行固定的文本字符串,因此不管你在数据流中输入什么文本,都会得到同样的文本输出。
Ctrl+D组合键会在bash中产生一个EOF字符。这个组合键能够终止该gawk
程序并返回到命令行界面提示符下。
$0代表整个文本行;
$1代表文本行中的第1个数据字段;
$2代表文本行中的第2个数据字段;
$n代表文本行中的第n个数据字段。
$ cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.
$
$ gawk '{print $1}' data2.txt
One
Two
Three
$$ echo "My name is Rich" | gawk '{$4="Christine"; print $0}'
My name is Christine
$
第一条命令会给字段变量$4赋值。第二条命令会打印整个数据字段。注意, gawk程序在输
出中已经将原文本中的第四个数据字段替换成了新值。
$ sed 's/test/trial/2' data4.txt
将替换标记指定为2的结果就是: sed编辑器只替换每行中第二次出现的匹配模式。
g替换标记使你能替换文本中匹配模式所匹配的每处地方。
$ sed 's/test/trial/g' data4.txt
p替换标记会打印与替换命令中指定的模式匹配的行。这通常会和sed的-n选项一起使用。
$ cat data5.txt
This is a test line.
This is a different line.
$
$ sed -n 's/test/trial/p' data5.txt
This is a trial line.
$
-n
选项将禁止sed编辑器输出。但p替换标记会输出修改过的行。将二者配合使用的效果就是
只输出被替换命令修改过的行。
w替换标记会产生同样的输出,不过会将输出保存到指定文件中。
$ sed 's/test/trial/w test.txt' data5.txt
This is a trial line.
This is a different line.
$
$ cat test.txt
This is a trial line.
$
sed编辑器允许选择其他字符来作为替换命令中的字符串分隔符:
$ sed 's!/bin/bash!/bin/csh!' /etc/passwd
在这个例子中,感叹号被用作字符串分隔符,这样路径名就更容易阅读和理解了。
$ sed '2s/dog/cat/' data1.txt
sed编辑器只修改地址指定的第二行的文本。
$ sed '2,3s/dog/cat/' data1.txt
修改第二、三行的文本。
如果想将命令作用到文本中从某行开始的所有行,可以用特殊地址——美元符。
$ sed '2,$s/dog/cat/' data1.txt
这篇关于第19章 sed和gawk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!