sed
擅长取行,awk
命令擅长取列
sed
- 格式:
sed <option> <script> <file>
- file不指定则默认为STDIN
option
-i
: 直接修改文件中的数据- sed默认不会修改文件数据,而是把修改后的数据发送到STDOUT
-i.backup
修改源文件并自动备份- 会加上
.backup
后缀
- 会加上
-e
: 执行多个命令- 命令之间必须用分号隔开
- 命令末尾和分号之间不能有空格
- 例子:
sed -e 's/brown/green/; s/dog/cat/' data.txt
-f
: 从脚本文件中读取命令- 每个命令一行,无需分号
- 例子:
sed -f script.sed data.txt
-n
:不产生命令输出,用p
完成输出
script
- s 命令:用第二个斜线间的字符串替换第一个斜线间的匹配的模式(正则)
- 格式:
sed '[address] s/pattern/replace/[flag]'
- 单引号也可以替换为双引号
- 默认只替换每行第一处匹配的字符串
- 默认的斜线分隔符不易处理路径(特别是替换目录时),所以也可以用
|^@!?
中任意一个当分隔符- 例子:
sed 's!/bin/bash!/bin/sh!' /etc/passwd
- 例子:
- 替换标记(flag)
<数字>
:第几处模式匹配的地方g
:替换所有匹配的文本<数字>g
表示第几个以后的匹配文本p
:配合option-n
只打印被修改过得行- 例子:
sed -n 's/test/dev/p' in.txt
- 也可以配合
!
- 例子:
- 格式: