sed (Stream EDitor)是-个强大而简单的文本解析转换工具.可以读取文本.并根据指定的条件对文本内容进行编辑(删除.替换.添加、移动等),最后输出所有行或者仅输出处理的某些行。sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell脚本中,用以完成各种自动化处理任务。
通常情况下调用sed 命令有两种格式,如下所示。其中,"参数”是指操作的目标文件.当存在多个操作对象时用,文件之间用逗号“,”分隔;而scriptfile表示脚本文件.需要用“-f”选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
常见的sed命令选项主要包含以下几种。
一e 或―—expression=:表示用指定命令或者脚本来处理输入的文本文件。一f 或—-file=:表示用指定的脚本文件来处理输入的文本文件。
一h 或一—help:显示帮助。
一n、-—quiet或silent:表示仅显示处理后的结果。一i: 直接编辑文本文件。
“操作”用于指定对文件操作的动作行为,也就是sed的命令。通常情况下是采用的“[n1[ ,n2]I"操作参数的格式。n1、n2是可选的,不一定会存在.代表选择进行操作的行数,如操作需要在5~20行之间进行.则表示为“5,20动作行为”。常见的操作包括以下几种。
a:增加.在当前行下面增加一行指定内容。
c:替换.将选定行替换为指定内容。
d:删除.删除选定的行。i:插入,在选定行上面插入一行指定内容。
P:打印如果同时指定行,表示打印指定行;如果不指定行.则表示打印所有内容;如果有非打印字符,则以ASCl码输出。其通常与“-n”选项起使用。
s:替换.替换指定字符。
y:字符转换。
(1)输出符合条件的文本
[root@lucky u4]# sed -n 'p' test.txt //输出所有内容,等同于cat命令
he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
The year ahead will test our political establishment to the limit.
...........//省略部分内容
[root@lucky u4]# sed -n '3p' test.txt //输出第三行
The home of Football on BBC Sport online.
[root@lucky u4]# sed -n '3,5p' test.txt //输出3~5行
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
[root@lucky u4]# sed -n 'p;n' test.txt //输出所有奇数行,n表示读入下一行资料
he was short and fat.
The home of Football on BBC Sport online.
google is the best tools for search keyword.
...........//省略部分内容
[root@lucky u4]# sed -n 'n;p' test.txt //输出所有偶数行,n表示读入下一行资料
He was wearing a blue polo shirt with black pants.
the tongue is boneless but it breaks bones.12!
The year ahead will test our political establishment to the limit.
a wood cross!
...........//省略部分内容
[root@lucky u4]# sed -n '1,5{p;n}' test.txt //输出第1~5行之间的奇数行
he was short and fat.
The home of Football on BBC Sport online.
google is the best tools for search keyword.
(2)替换符合条件的文本
在使用sed 命令进行替换操作时需要用到s (字符串替换)、c(整行/整块替换).y (字符转换)命令选项,常见的用法如下,
(3)迁移符合条件的文本
其中,H.复制到剪贴板: g.G,将剪贴板中的数据覆盖/追加至指定行;w,保存为文件:r.读取指定文件:a,追加指定内容。
在Linux/UNX系统中,aw是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell 脚本,完成各种自动化配置任务。
(1)awk的常见用法
通常情况下 awk所使用的命令格式如下所示,其中,单引号加上大括号“彩”用于设置对数据进行的处理动作。awk可以直接处理目标文件,也可以通过“-f”读取脚本对目标文件进行处理。
前面提到sed 命令常用于--整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或者tab键。awk执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”,表示“与”,"Il”表示“或","!”表示“非”,还可以进行简单的数学运算.如+、—"、*、/、%."分别表示加.减、乘.除.取余和乘方。
在Linux系统中/etc/passwd 是一个非常典型的格式化文件.各字段间使用^:"作为分隔符隔开.Linux系统中的大部分日志文件也是格式化文件,从这些文件中提取相关信息是运维的日常工作内容之一。若需要查找出/etc/passwd的用户名.用户ID、组ID等列,执行以下awk命令即可。
[root@lucky u4]# awk -F ':' '{print $1,$3,$4}' /etc/passwd | tail -5
avahi 70 70
postfix 89 89
tcpdump 72 72
mysql 1001 1001
zhangsan 1002 1002
awk包含几个特殊的内建变量,如下所示
FS:指定每行文本的字段分隔符默认为空格或制表位。
NF:当前处理的行的字段个数。
NR:当前处理的行的行号〔序数)。sO:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列》。FILENAME:被处理的文件名。
RS:数据记录分隔,默认为\n,即每行为一条记录。
(3)用法示例
按行输出文本
按字段输出文本
通过管道,双引号调用Shell命令