sed
一般用于对文本内容做替换
1. 基本使用
- sed的基本工作方式
- 将文件以行为单位读取到内存(模式空间)
- 使用sed的每个脚本对该行进行操作
- 处理完成后输出该行
- sed的替换命令
s
:
- sed ‘s/old/new/’ filename …
- sed -e ‘s/old/new/’ -e ‘s/old/new/’ filename … 依次执行每一条替换指令 == sed ‘s/old/new/;s/old/new/’ filename …
- sed -i ‘s/old/new/’ filename … 将替换后的内容写入原文件
- 代正则表达式的替换命令
s
:
- sed ‘s/正则表达式/new/’ filename
- sed -r ‘s/扩展正则表达式/new/’ filename
- 例子
[hadoop@bigdata tmp]$ sed "s/a/aa'/" afile a1file
aa' a a
aa' a a
# 依次执行多条指令
[hadoop@bigdata tmp]$ sed -e 's/a/aa/' -e 's/aa/bb/' afile
bb a a
[hadoop@bigdata tmp]$ sed 's/a/aa/;s/aa/bb/' afile
bb a a
# 写回原文件
[hadoop@bigdata tmp]$ sed -i 's/a/aa/;s/aa/bb/' afile
[hadoop@bigdata tmp]$ cat afile
bb a a
# 替换内容写入写文件, > 覆盖写 >> 追加写
[hadoop@bigdata tmp]$ sed 's/a/aa/;s/aa/bb/' afile > bfile
[hadoop@bigdata tmp]$ cat bfile
bb a bb
# 使用正则表达式 扩展元字符要使用 -r
[hadoop@bigdata tmp]$ sed 's/b*/cc/' afile
cc a bb
[hadoop@bigdata tmp]$ sed -r 's/b+/cc/' afile
cc a bb
[hadoop@bigdata tmp]$ sed -r 's/b?/cc/' afile
ccb a bb
# 回调
[hadoop@bigdata tmp]$ sed -r 's/(a.*b)/\1:\1/' afile
bb
ab:ab
aaa
bbb
aab:aab
abbb:abbb
abb:abb
axyzb:axyzb
- 几个注意的点
- 如果替换的内容中出现了和分割符一样的字符,可以将分隔符修改为其它字符