sed与awk的共同点:
*它们都使用相似的语法來调用
*它们都是面向字符流的,都是从文本文件中一次一行的读取输入,并将输出直接送到标准输出端
*它们都使用正则表达式进行模式匹配
*它们都允许用户在脚本中指定指令
sed与awk的命令行语法大致相同:
command [options] script filename
sed和awk都可以从标准输入中取得输入并将输出发送到标准输出。如果指定文件名filename,输入就来自那个文件。
sed和awk一个共同的选项是-f选项,这个选项允许指定脚本文件的名字。
sed -f scriptfile inputfile
在sed和awk中,每个指令都包括两个部分:模式和过程
模式是由斜杠(/)分隔的正则表达式。
过程指定一个或多个将被执行的动作。
使用sed
指定简单的指令:
sed [-e] 'instruction' file
只有在命令行上给出多个指令时才需要用-e选项。它告诉sed将下一参数解释为指令。
并不是在任何情况下都需要将指令用单引号包围起来,但应该养成这个习惯
有3种方式可以指定命令行上的多重指令:
1.用分号分隔指令
sed 's/ MA/, Massachusetts/; s/ PA/, Pennsylvania/' list
2.在每个指令前放置-e
sed -e 's/ MA/, Massachusetts/' -e 's/ PA/, Pennsylvania/' list
3.使用Bourne shell的分行指令功能
$sed '
>s/ MA/, Massachusetts/
>s/ Pa/, Pennsylvania/
>s/ CA/, California/' list
阻止输入行的自动显示
sed的默认操作是输出每个输入行。
-n:可以阻止自动输出。当指定该选项是,每个要生成输出的指令都必须包含答应命令p。如:
sed -n -e 's/MA/Massachusetts/p' list
表:sed的命令行选项
选项 | 描述 |
-e | 编辑随后的指令 |
-f | 跟随脚本中的文件名 |
-n | 阻止输入行的自动输出 |
使用awk
命令行语法是:
awk 'instructions' files
用脚本文件调用awk的语法:
awk -f script files
表:awk的命令行选项
-f | 跟随脚本文件的文件名 |
-F | 改变字段分隔符 |
-v | 跟随var=value |