1.1 sed
sed编辑器会作如下操作。
(1) 一次从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改流中的数据。
(4) 将新的数据输出到STDOUT(不会修改原文件)。
命令格式 sed 【options】【script】【file】
命令参数
选项
|
描述
|
-e
|
script 在处理输入时,将script中指定的命令添加到已有的命令中(处理命令写在命令中)
|
-f
|
file 在处理输入时,将file中指定的命令添加到已有的命令中 (将待执行命令写在文件中)
|
-n
|
不产生命令输出,使用print命令来完成输出
|
1.1.1 文本替换 命令s (substitute) 替换时,会区分大小写
echo "This is a test" | sed 's/test/big test/' 用“big test”替换“test”
sed 's/dog/cat/' data1.txt 用“cat”替换“dog”
运行多个编辑命令
sed -e 's/brown/green/; s/dog/cat/' data1.txt
ps: 两个命令都作用到文件中的每行数据上。命令之间必须用分号隔开,并且在命令末尾和分号之间不能有空格
将多行命令存入文件运行
sed编辑器知道每行都是一条单独的命令
替换命令默认只会替换每行的第一处文本,
有4种可用的替换标记:
数字,表明新文本将替换第几处模式匹配的地方;
sed 's/test/trial/2' data4.txt 只替换每行第二次匹配的文本
g,表明新文本将会替换所有匹配的文本;
sed 's/test/trial/g' data4.txt 替换所有
p,表明原先行的内容要打印出来;
sed -n 's/test/trial/p' data5.txt 只输出被修改过的行
w file,将替换的结果写到文件中。
sed 's/test/trial/w test.txt' data5.txt
替换内容包括特殊字符时,使用“!”加以区别
sed -n 's!conf/server.xml!conf/server-test!p' catalina.log
sed -n 's!conf/server.xml!conf/server-test!gw test.txt' catalina.log
1.1.2 行寻址(line address)
两种方式 : 以数字形式表示行区间、 用文本模式来过滤出行。
1.1.2.1 单独某行
sed -n '3s/xerces/xerces-test/p' catalina.log
1.1.2.2 行区间
sed -n '3,5s/xerces/xerces-test/p' catalina.log
下列两种读取行数方式等同
sed -n '3,5p' catalina.log > test.txt
sed -n '3,5w test.txt' catalina.log
1.1.2.3 从某行开始至末尾
sed '2,$s/dog/cat/' data1.txt
1.1.3 多命令组合,以分号“;”分割
sed -n '3s/xerces/xerces-test/;3s/internal/internal-test/p' catalina.log
将修改前后打印出来
sed -n '3{p;3s/internal/internal-test}' catalina.log
1.1.4 删除行 d
可以和行号、文本匹配(包括正则)搭配使用,删除指定行的内容(原文件未改变)
1.1.5 插入i( insert)、附加文本a( append)
插入命令 i 会在指定行前增加一个新行;
附加命令 a 会在指定行后增加一个新行。
1.1.6 列出命令 l (小写L),显示特殊字符
1.2 awk、gawk
选项
|
描述
|
-F fs
|
指定行中划分数据字段的字段分隔符
|
-f file
|
从指定的文件中读取程序
|
-v var=value
|
定义gawk程序中的一个变量及其默认值
|
-mf N
|
指定要处理的数据文件中的最大字段数
|
-mr N
|
指定数据文件中的最大数据行数
|
-W keyword
|
指定gawk的兼容模式或警告等级
|
echo "hai ge tou ya" | awk '{print "this is a"}'
sed -n '3,5p' catalina.log | awk -F . '{print $1}'