初识 sed 和 gawk

sed 编辑器

sed 命令的格式如下:

sed options script file
选项描述
-e script在处理输入时,将 script 中指定的命令添加到已有的命令中
-f file在处理输入时,将 file 中指定的命令添加到已有的命令中
-n不产生命令输出,使用 print 命令来完成输出

在命令行定义编辑器命令

默认情况下,sed 编辑器会将指定的命令应用到 STDIN 输入流上。这样可以直接将数据通过管道输入 sed 编辑器处理。
这里有个简单的示例:

$ echo "This is a test" | sed 's/test/big test/'
This is a big test

这个例子在 sed 编辑器中使用了 s 命令。s 命令会用斜线间指定的第二个文本字符串来替换第一个文本字符串模式。
在本例中是 big test 替换了 test
在运行这个例子时,结果应该立即就会显示出来。这就是使用 sed 编辑器的强大之处。你可以同时对数据做出多处修改,而所消耗的时间却只够一些交互式编辑器启动而已。

mary@DESKTOP-2PJF7EM:~$ cat data1.txt 
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
mary@DESKTOP-2PJF7EM:~$ sed 's/dog/cat/' data1.txt 
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.

sed 命令几乎瞬间就执行完并返回数据。在处理每行数据的同时,结果也显示出来了。可以在 sed 编辑器处理完整个文件之前就开始观察结果。

重要的是,要记住,sed 编辑器并不会修改文本文件的数据。它只会讲修改后的数据发送到 STDOUT。如果你查看原来的文件,它仍然保留着原始数据。

mary@DESKTOP-2PJF7EM:~$ cat data1.txt 
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.

在命令行使用多个编辑器命令

要在 sed 命令行上执行多个命令时,只要用 -e 选项就可以了。

mary@DESKTOP-2PJF7EM:~$ sed -e 's/brown/green/; s/dog/cat/' data1.txt 
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.

两个命令都是作用到文件中的每行数据上。命令之间必须用分号隔开,并且在命令末尾和分号之间不能有空格。
如果不想用分号,也可以用 bash shell 中的次提示符来分隔命令,只要输入第一个单引号标示处出sed 程序脚本的起始(sed 编辑器命令列表),bash 会继续提示你输入更多命令,直到输入了标示结束的单引号。

mary@DESKTOP-2PJF7EM:~$ sed -e '
> s/brown/green/
> s/fox/elephant/
> s/dog/cat/' 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.

必须记住,要在封尾单引号所在行结束命令。bash shell 一旦发现了封尾的单引号,就会执行命令。开始后,sed 命令就会将你指定的每条命令应用到文本文件的每一行上。

从文件中读取编辑器命令

最后,如果有大量要处理的 sed 命令,那么将它们放进一个单独的文件中通常会更方便一些。可以在 sed 命令中用 -f 选项来指定文件。

mary@DESKTOP-2PJF7EM:~$ cat script1.sed 
s/brown/green/
s/fox/elephant/
s/dog/cat/
mary@DESKTOP-2PJF7EM:~$ 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.

在这种情况下,不用在每条命令后面放一个分号。sed 编辑器知道每行都是一条单独的命令。
和在命令行输入命令一样,sed 编辑器会从指定文件中读取命令,并将它们应用到数据文件中的每一行上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值