1.sed语法
例子:
(1)从stdout流中读取数据
echo "This is a test" | sed 's/test/big test/'
(2)执行多条命令,-e选项,命令用分号隔开,封号前面不能有空格
echo "This is a test" | sed -e 's/test/big test/;s/This/That/'
(3)命令和多可以采用-f选项将命令放在文件中,每一行一个命令
sed -f command.txt filename
2.gawk基本语法
gawk,可以使用多条命令,命令之间用封号分开:
例子:替换第4个字段
echo "My name is Rich" | gawk '{$4="Christine" ;print $0}'
My name is Christine
ctrl+d :产生一个eof 符,可以结束gawk命令的输入
gawk字段变量的使用:
采用-F手动指定分割符,想使用单词,或单词间有空格请用""引起来,否则会报错
gawk -F: '{print $1}' /etc/passwd
gawk读取文件中命令:
gawk:引用变量无需使用$符
gawk采用BEGIN关键字,执行处理数据之前的脚本,END关键字处理数据处理完的情形.重复使用会产生累加效果。
echo "My name is Rich" | gawk 'BEGIN{print "The gawk test"}END{print "This is end"}{$4="Christine" ;print $0}'
3.sed替换标记
4.sed的替换字符:当遇到需要转义的字符,可以用!等符号作为/的替换,甚至可以用数字,不过使用了文本中这些符号如果要使用同样要转义。。。转义数字?
4.使用地址
sed的作用范围是全体内容,有时只想操作指定内容,这样就需要指定范围。
寻址方式:
1.数字方式寻址
(1)指定行数:sed '1s/brown/blue/' sed_data.txt替换第一行
(2)指定行范围:sed '2,3s/brown/yellow/' sed_data.txt 替换2-3行
(3)使用$符号,统配到文章末尾:sed '2,$s/brown/yellow/' sed_data.txt 替换第2到文本末尾
2.使用文本模式过滤
sed '/quick1/s/brown/yellow/' sed_data.txt 过滤有quick1的文本
3.组合命令
sed '2{s/brown/bluely/
s/fox/dog/
}' sed_data.txt
5.删除行
(1)删除全部 :sed 'd' sed_data.txt
(2)删除指定行:sed '2d' sed_data.txt 删除第二行
(3)删除指定范围:sed ‘2,3d’ sed_data.txt 删除第二和第三行
(4)删除指定行到末尾:sed '2,$d' sed_data.txt 删除第二到末尾
(5)通过模式进行删除:sed '/1/,/2/d' sed_data.txt 删除文本第一次出现1直到出现2结束(删除的包括2)如果没匹配到2,则会删除1后面匹配的所有行
6.插入和追加
追加命令用a:在匹配的后面加上新的一行
插入命令用 i:在匹配的前面插入一行
7.修改行
sed '3c\this is a changed line of text.' sed_data.txt 替换第3行
sed '2,3c\this is a changed line of text.' sed_data.txt 把第2和第3行替换
8.转换字符
echo "This 1 is a test of 1 try"|sed 'y/123/456/' 替换1为4
9.回顾打印
(1)sed '/hello/p' sed_data.txt 打印匹配到的hello
(2)sed -n '/hello/p' sed_data.txt -n 禁止打印非匹配的行
(3)sed -n '/hello/l' sed_data.txt l可以打印非可见字符
(4)sed -n '/hello/=' sed_data.txt 打印行号
10.文件操作
(1)写文件
sed '1,2w 123' sed_data.txt 写入到文件123中
(2)读文件
sed '/12/r 123' sed_data.txt 读取123文件中匹配12的到sed_data.txt中