sed用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed用法相关的知识,希望对你有一定的参考价值。
参数
-i # 将修改保存到文件
-e # 在命令行运行多条sed命令
-n # 打印由p命令指定的行
-f # 指定sed命令脚本文件
-r #使用扩展正则表达式,脱意
替换标记,4种可用的替换标记
s/pattern/replacement/flags
数字,替换一行中第几次模式匹配的地方
g 替换一行中所有匹配的地方
p 打印匹配的行
w file ,将替换结果写到文件file中,只写匹配的内容
数字寻址,用数字来指定行
#-i 参数的一个用法
sed -i.bak ‘s/bin/sbin/g‘ /etc/passwd
#此命令会在修改文件前备份,并以.bak为后缀
匹配行:
- sed -n ‘2,5p‘ /etc/passwd # 打印2-5行
- sed ‘1,10d‘ /etc/passwd # 删除1-10行
#最后一行可以用 $ 表示,例如3,$表示从第三行到最后一行
#addr1,+N # 表示 从addr1到addr1+N行,例如2,8,表示2-10行
#addr1,~N # 表示从addr1到N的倍数的行,例如5,~4 ,表示5-8行,因为8是大于5的4的整数倍的最小一个
#first~step # 表示以first开始,后面每次加step,例如1~2,表示所有的奇数行,如下所示
替换
- sed -n ‘s/pattern/replace/‘ /etc/passwd # 替换首次匹配的pattern为replace
- sed -n ‘s/pattern/replace/g‘ /etc/passwd # 替换所有,g表示全局
- sed -n ‘s/pattern/&replace/g‘ file # 在pattern后增加
- sed -n ‘s/pattern/replace&/g‘ file # 在pattern前增加
- sed -n ‘s/pattern/L&/g‘ file # 将pattern转换为大写
- sed -n ‘s/pattern/U&/g‘ file # 将pattern转换为小写
- sed -n ‘s/[A-Z]/l&/g‘ file # 将文件中的大写字母转换为小写,l,u只支持单个字符,L,U支持多个,大家应该知道是锚定的意思,说白了就是边界符,那么这就只会匹配第一个开头的字母,然后U的意思在元字符里的解释是“大写(不是标题首字符)E 以前的字符”,而u只是将下一个字符变为大写,注意它们的区别噢。
删除
#注意,d命令是在后面的,s命令在前面
- sed 1,5d file # 删除1-5行
- sed ‘/pattern/d‘ # 删除匹配的行
#删除操作的匹配模式跟替换一样 - sed ‘s/[0-9]//g‘ 1.txt #删除所有数字
- sed ‘s/[^0-9]//g‘ 1.txt #删除所有非数字
插入
#在行后插入
- sed 1,4G file # 在1-4行后面插入一行空行
- sed ‘/pattern/G‘ # 在匹配行后面插入一个空行
- sed G file # 在每一行后面插入一个空行
- sed ‘s/$/wq&/‘ file # 在行尾插入字符wq
- sed ‘/pattern/a
ew line‘ file # 在匹配行后插入一行new line,匹配模式可以是正则表达式,也可以是行地址
#在行前插入 - sed 1,4‘{x;p;x}‘ file # 在1-4行前插入一个空行,注意与G的不同
- sed N‘{x;p;x}‘ # 在第N行前插入空行
- sed ‘/root/{x;p;x}‘ /etc/passwd # 在匹配行前插入空行
- sed ‘{x;p;x}‘ /etc/passwd # 在每一行前面插入空行
- sed ‘/pattern/i ew line‘ file # 在匹配行前插入一行new line
- 显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理
- sed ‘=‘ file | sed ‘N;s/ / /‘
- 调换两个字符串位置:
- head -n2 1.txt|sed -r ‘s/(root)(.*)(bash)/321/‘
#在sed中可以用()去表示一个整体,123分别表示一个括号内容 - 打印文件中特定的某行到某行之间的内容
sed -n ‘/起始内容/,/终止内容/p‘ filename - 把一个文件多行连接成一行
cat filename|xargs|sed ‘s/ /+/g‘ - 在文件中某一行最后添加一个数字
sed ‘s/(^a.)/1 12/‘ test
或者sed ‘s/./& 12/‘ test - 使用sed打印1到100行包含某个字符串的行
sed -n ‘1,100{/abc/p}‘ 1.txt - 转换大小写字母
#sed中使用u表示大写,l表示小写
sed ‘s/[a-z]/u&/g‘ filename #每个单词的第一个小写字母变大写
sed ‘s/[a-z]/u&/g‘ filename #大写替换小写
sed ‘s/[A-Z]/l&/g‘ filename #大写变成小写 - vim+sed删除行首数字和空字符
在vim下输入:%s/^[0-9][0-9]// 删除行首数字
sed -i ‘s/^ //g‘ filename #删除行首所有空字符
练手脚本.note - grep -v ^# filename|sed /^[[:space:]]*$/d|sed /^$/d #删除文本中的空行、以空格组成的行及#注释的行
- sed -i ‘20,30s/^/#/‘ filename #给20到30行开头加上#号
以上是关于sed用法的主要内容,如果未能解决你的问题,请参考以下文章