sed 命令的格式如下:
sed options script file
options 允许定制 sed 命令的行为,sed 命令选项如下表:
选项 | 描述 |
---|---|
-e script | 在处理输入时, 加入 script 中指定的命令 |
-f file | 在处理输入时, 加入文件file 中包含的命令 |
-n | 不再为每条命令产生输出,而是等待打印(p)命令 |
script 指定了应用于数据流的单条命令。如果用到的命令不止一条,则要么使用-e 选项在命令行上指定,要么使用-f 选项在一个单独的文件中指定。
s/pattern/replacement/flags
[address]command
$ sed '2,3s/dog/cat/' data1
/pattern/command
$ sed '/rich/s/bash/csh/' /etc/passwd
address {
command1
command2
command3 }
$ sed '2{
> s/fox/elephant/
> s/dog/cat/
> }' data1
要么通过行号指定地址:
$ sed '3d' data1
要么通过行区间指定地址:
$ sed '2,3d' data1
$ sed '/number 1/d' data1
sed ' [address]command\
new line '
$ sed '3c\
> This is a changed line of text.' data1
[address]y/inchars/outchars/
$ sed -n '/number 3/p' data1
This is line number 3.
$
[address]w filename
[address]r filename
$ sed '3r data' data1
gawk options program file
选项 | 描述 |
---|---|
-F fs | 指定用于划分行中各个数据字段的字段分隔符 |
-f file | 指定要从哪个文件中读取脚本 |
-v var=value | 定义 gawk 脚本中要使用的变量及其默认值 |
-mf N | 指定数据文件中的最大字段数 |
-mr N | 指定数据文件中的最大记录数 |
-W keyword | 指定 gawk 的兼容模式或警告等级。使用 help 选项列出所有可用的关键字 |
$ gawk '{print $1}'
$ echo "My name is Rich" | gawk '{$4="Dave"; print $0}'
My name is Dave
$
$ cat script1
{ print $5 "'s userid is " $1 }
$ gawk -F: -f script1 /etc/passwd
$ gawk 'BEGIN {print "This is a test report"}'
This is a test report
$
$ gawk 'BEGIN {print "Hello World!"} {print $0} END {print
"byebye"}' data1
Hello World!
This is a test
This is a test
This is another test.
This is another test.
byebye
$
gawk 脚本使用内建变量来引用特定的数据信息。
gawk 脚本会将数据定义为记录和数据字段。记录是一行数据(默认以换行符分隔),而数据字段则是行中独立的数据元素(默认以空白字符分隔,比如空格或制表符)。
gawk 脚本使用数据字段来引用每条记录中的数据元素。
gawk 数据字段和记录变量:
变量 | 描述 |
---|---|
$0 | 整条记录 |
$1 | 记录中的第一个数据字段 |
$2 | 记录中的第二个数据字段 |
$n | 记录中的第 n 个数据字段 |
FIELDWIDTHS | 由空格分隔的数字列表,定义了每个数据字段的具体宽度 |
FS | 输入字段分隔符 |
RS | 输入记录分隔符 |
OFS | 输出字段分隔符 |
ORS | 输出记录分隔符 |
更多的 gawk 内建变量:
变量 | 描述 |
---|---|
ARGC | 当前命令行参数的个数 |
ARGIND | 当前文件在 ARGV 数组中的索引 |
ARGV | 包含命令行参数的数组 |
CONVFMT | 数字的转换格式(参见 printf 语句),默认值为%.6g |
ENVIRON | 由当前 shell 环境变量及其值组成的关联数组 |
ERRNO | 当读取或关闭输入文件发生错误时的系统错误号 |
FILENAME | 作为 gawk 输入的数据文件的文件名 |
FNR | 当前数据文件中的记录数 |
IGNORECASE | 如果设置成非 0 值,则 gawk 会忽略所有字符串函数(包括正则表达式)中的字符大小写 |
NF | 数据文件中的数据字段总数 |
NR | 已处理的输入记录数 |
OFMT | 数字的输出格式,默认值为%.6g |
RLENGTH | 由 match 函数所匹配的子串的长度 |
RSTART | 由 match 函数所匹配的子串的起始位置 |
在 gawk 脚本中给变量赋值需要使用赋值语句:
$ gawk '
> BEGIN{
> testing="This is a test"
> print testing
> }'
This is a test
$
也可以在 gawk 命令行上给变量赋值。这允许在正常脚本之外即时设置或修改变量值。下面的例子使用命令行变量显示文件中特定数据字段:
$ cat script1
BEGIN{FS=","}
{print $n}
$ gawk -f script1 n=2 data1
$ gawk -f script1 n=3 data1
$ gawk 'BEGIN{FS=","} /test/{print $1}' data1
This is a test
$
$1 ~ /^data/
$ gawk -F: '$4 == 0{print $1}' /etc/passwd
if-then-else 语句:
if (condition) statement1; else statement2
while 语句:
while (condition)
{
statements
}
do-while 语句:
do {
statements
} while (condition)
for 语句:
for(variable assignment; condition; iteration process)