字符串处理个几个操作为
替换,切割,打印,统计
sed
在缓存中进行更改,不影响原文件,然后默认将缓存输出,所以使用d命令删除的不会输出
语法: some_command | sed ‘edit commands‘
sed ‘edit commands‘ files
edit commands的一般形式为:
/pattern/action
action描述
p 打印行(print)
d 删除行(delete)
s 用一个新表达式替换旧表达式(substitute)
一个替换例子
sed ‘s/[email protected]/[email protected]/g‘ "$file" > "$file.$$"
此例前面没有/pattern/表示对所有行进行action。而替换操作s的一般格式是
s/pattern2/pattern3/
或 /pattern1/s/pattern2/pattern3/
pattern1用来确定要操作的行,s/pattern2/pattern3/看作是action
最后的符号g是global的意思,因为替换命令s默认只对行数据第一个匹配pattern2的字符串进行替换,添加g符号可以行全局替换
在没有指定-n选项时,每一行读入的,都会输出到输出流,即使没有任何操作。p命令明确确定输出到输出流,一般和-n一起用,否则会输出两次。
使用分号可以连接多个/pattern/action,用-e指定多个编辑命令,用-f script-file选项通过文件指定编辑命令。但本质都是按出现顺序执行。将前一条命令的输出作为输入传给后一条命令
匹配时忽略大小写可以使用i或I修饰符
修饰符:
num
只取代一行中第num个匹配
p
如果匹配成功,打印模式空间
w FILENAME
如果匹配成功,把结果写到文件FILENAME中(gnu sed 可以向/dev/stderr和/dev/stdout中写数据)
g
全局匹配,而不是只替换第一个匹配
i or I
大小写不敏感
pattern中的/可以用反斜杠转义,但多了就乱了。
sed在使用s命令时会以s字符后的字符作为分隔符。
选择要操作的行
在sed命令前指定要操作的地址
指定某行 sed ‘11d‘
指定范围 sed ‘3,26d‘ 另一形式:sed -n ‘3,+3p‘ 指定开始的行号,然后指定后面行数。
指定范围取反, sed ‘3,26!p‘ 在范围后加!表示取反范围。单行也可加
指定步长, sed ‘ 1~2p‘ 从第一行开始,步长2
可加正则表达式,正则表达式在斜杠中间。
用正则表达式确定匹配的行范围
sed -n ‘/^#net.ipv4.conf.all.accept_redirects/,/^#net.ipv6.conf.all.accept_source_route/p‘
可以引用正则表达式匹配的字符串,用&符号
sed ‘s/^[^#].*$/#&/‘