sed和awk的学习
sed
sed编辑器:可以用键盘命令来交互式地插入、删除或替换数据中的文本。
命令格式:sed options script file
-
在命令行使用多个编辑器命令 sed -e ‘s/brown/green/; s/dog/cat/’ data1.txt
或者输入第一个单引号标示出sed程序脚本的起始,直到输入了标示结束的单引号。
-
从文件中读取编辑器命令 sed -f script1.sed data1.txt
sed基础
-
替换标记:
-
数字,表明新文本将替换第几处模式匹配的地方;
eg: sed ‘s/test/trial/2’ data4.txt
sed替换每行中第二次出现的匹配模式。
-
g,表明新文本将会替换所有匹配的文本;
eg:sed ‘s/test/trial/g’ data4.txt
-
p,表明原先行的内容要打印出来;
eg:sed -n ‘s/text/trial/p’ data4.txt
-n选项将禁止sed编辑器输出。但p替换标记会输出修改过的行。将二者配合使用的效果就是只输出被替换命令修改过的行。
-
w file,将替换的结果写到文件中。
eg:sed ‘s/test/trial/w test.txt’ data5.txt
将文本输出显示到test.txt文件中。
-
-
替换字符
-
替换字符就是正斜线(/)
-
替换文件中的路径名会比较麻烦。
C shell替换/etc/passwd文件中的bash shell
解决方案: sed ‘s//bin/bash//bin/csh/’ /etc/passwd
其他字符来作为替换命令中的字符串分隔符:
$ sed ‘s!/bin/bash!/bin/csh!’ /etc/passwd
-
-
使用地址
-
两种行寻址:以数字形式表示行区间,用文本模式来过滤出行。
-
两种形式都使用相同的格式来指定地址:[address]command
-
数字方式的行寻址:
eg:sed ‘2s/dog/cat/’ data1.txt
解释:sed编辑器只修改地址指定的第二行的文本,
eg:sed ‘2,3s/dog/cat/’ data1.txt
解释:sed行地址区间,替换2到3行的文本
eg:sed ‘2,$s/dog/cat/’ data1.txt
解释:中从某行开始的所有行,可以用特殊地址——美元符。
-
使用文本模式过滤器:sed编辑器允许指定文本模式来过滤出命令要作用的行。格式如下:
/pattern/command
-
-
删除行 ‘d’
eg:删除第三行: sed ‘3d’ data6.txt
-
插入和附加文本
-
插入(insert)命令(i)会在指定行前增加一个新行;
eg1:当使用插入命令时,文本会出现在数据流文本的前面。
echo “Test Line 2” | sed ’ i\Test Line 1’
-
附加(append)命令(a)会在指定行后增加一个新行。
eg2:当使用附加命令时,文本会出现在数据流文本的后面。
echo “Test Line 2” | sed ’ a\Test Line 1’
-
-
修改行:修改(change)命令允许修改数据流中整行文本的内容。
cat data6.txt
This is line number 1.
This is line number 2.
This is line number 3.
This is line number 4. eg: sed '3c\ This is a changed line of text. ’ data6.txt
-
转换命令:转换(transform)命令(y)是唯一可以处理单个字符的sed编辑器命令。
eg: sed ‘y/123/789/’ data6.txt
解释:将123单个字符转换成789
输出结果:
This is line number 7.
This is line number 8.
This is line number 9.
This is line number 4. -
打印
-
p命令用来打印文本行;
eg: echo "this is a test " |sed ‘p’
输出结果:
this is a test
this is a test -
等号(=)命令用来打印行号;
sed ‘=’ data6.txt
输出结果:
1
This is line number 1.
2
This is line number 2.
3
This is line number 3.
4
This is line number 4. -
l(小写的L)命令用来列出行。列出(list)命令(l)可以打印数据流中的文本和不可打印的ASCII字符。
eg: cat data7.txt
This line contains tabs.
sed -n ‘l’ data7.txt
输出结果:
This\tline\tcontains\ttabs.$
解释:制表符的位置用\t来显示,行尾的美元符号表示换行符。
-
-
使用sed处理文件
-
写入文件:
-
w命令用来向文件写入行。
eg: sed '1,2w test.txt ’ data6.txt
cat test.txt
This is line number 1.
This is line number 2.解释:将data6.txt 文件中的1,2 行写入test.txt文件
-
将文本模式的数据行写入目标文件。
eg:cat data11.txt
Blum, R Browncoat
McGuiness, A Alliance
Bresnahan, C Browncoat
Harken, C Alliancesed -n ‘/Browncoat/w Browncoats.txt’ data11.txt
cat Browncoats.txt
Blum, R Browncoat
Bresnahan, C Browncoat
-
-
从文件读数据
-
读文件
cat data12.txt
This is an added line.
This is the second added line.sed ‘3r data12.txt’ data6.txt
This is line number 1.
This is line number 2.
This is line number 3.
This is an added line.
This is the second added line.
This is line number 4.解释:sed编辑器会将数据文件中的所有文本行都插入到数据流中。
-
-