linux sed命令操作大全
?经常使用,但有些总记不全,有时候经常查找,这次全部捋清楚做备忘,有需要的小伙伴欢迎收藏起来哦!
查、增、改、删一应俱全,非常详细!
目录
一、查看
注意,下面每条指令中最后的a是文件名。
查看第2行
sed -n '2p' a
查看第2行到第3行
sed -n '2,3p' a
查看第1行、第3行
sed -n -e "1p" -e "3p" a
查看从第2行开始到文件结束的内容
sed -n '2,$p' a
上面指令中引号也可以去掉。
查看文件中包含指定字符的行
如下,查看文件中包含hello的行:
sed -n '/hello/p' a
或使用awk完成:
awk '/hello/' a
查看文件中包含指定字符的行数
如下,查看文件中包含hello的行的行数:
sed -n '/hello/p' a |wc -l
也可以grep实现:
grep -c "hello" a
二、文本内容替换
1,替换每行第一个出现的指定内容
如仅替换每行第一个出现的123
sed 's/123/abc/' a
2,全局替换
全局替换每行的指定内容为新内容:
sed 's/123/abc/g' a
3,全局替换:按每行
如按每行从第2个出现时开始进行替换:
sed 's/123/abc/2g' a
4,全局替换:按指定行数
情景1:替换的范围是相连的几行或1行
如下,即替换第3行~第5行内容中的123为abc
sed '3,5s/123/abc/g' a
当然,如果只想替换第3行~第5行中每行第一个123,则去掉g就可以了。
情景2:替换的范围是不相连的几行
如第1行、第3行:
sed -e '3s/123/x/g' -e '11s/123/x/g' a
或
sed -e '3s/123/x/g;11s/123/x/g' a
5,关于定界符
上述案例中/是定界符,该符号可自行设置,如我想换成用#定界:
sed 's#123#abc#2g' a
6,替换包含斜杠、反斜杠的内容
方案1
换定界符可实现,如下将/替换为x:
sed 's#/#x#g' a
如果不换定界符,就是要用\来替换含有\等符号的字符串,怎么办?
如将文件中斜杠、反斜杠替换为x,结果都一样:
sed 's/\/x/g' a
sed: -e expression #1, char 7: unterminated `s' command
sed 's///x/g' a
sed: -e expression #1, char 5: unknown option to `s'
如此会报错。那怎么解决?看方案2.
方案2
对于要替换的内容有斜杠的,用反斜杠转义即可成功:
sed 's/\//x/g' a
如果反斜杠要替换,则也用反斜杠转义:
sed 's/\\/x/g' a
特殊情况:如果要替换的既包含/又包含\
如下,将文件中的所有斜杠、反斜杠均替换为x:
sed 's/\//x/g;s/\\/x/g' a
特殊情况:斜杠替换为反斜杠
sed -i 's/\//\\/g' a
即都用反斜杠转义即可。
7,替换包含引号、单引号的内容
双引号替换为x
如下,将双引号替换为x,其中双引号要用反斜杠\转义:
sed -i 's#\"#x#g' a
单引号替换为x
如下,将单引号替换为x,其中外围的一对单引号需换为双引号,和里面不要交叉即可:
sed -i "s#'#x#g" a
单引号替换为双引号
但是,如果是引号换为另一种引号呢?如将单引号替换为双引号:
sed -i "s#'#\"#g" a
即,双引号用\转义即可成功。
8,替换仅为了打印查看效果,不修改原文件时
sed -e?
9,一次替换多个原内容
解决办法:用分号;隔开
举例如替换文件中123为x,替换456为y:
sed 's/123/x/g;s/456/y/g' a
10,替换整行内容
字符c用来操作指定行,如1c指的是第一行,1,3c就是第1行~第3行
情景1:整体替换、行数可能变化
将第1行完整替换为x
sed -i '1c x' a
将第1、2行的所有内容完整替换为x
sed -i '1,2c x' a
此时效果是原来的第1、2行消失,被替换为了x,相当于文件整体少了一行。
(注意并不是把第1、2行每行都各自替换为x哦)
情景2:整体替换指定行、行数不变
将第1、2行的每行内容都替换为x
方法1
sed -i '1c x' a | ?sed -i '2c x' a
即用管道符连接多个行操作。
方法2
不使用c,使用正则+替换的办法来实现:
sed -i '1,2s/.*/x/g' a
情景3:操作行替换的是不相连的几行
如果是不相连的两行,如第1行、第3行:
sed -i -e '1s/.*/x/g' -e '3s/.*/x/g' a
或
sed -i -e '1s/.*/x/g;3s/.*/x/g' a
11,替换的内容中包含中括号[]的
如原内容为[a] = 1,替换为a = 1
sed -i "s#\[a\] = 1#a = 1#g" a
三,追加&插入
下面都是操作a文件。
?换行插入:给第1、2、3行的每行后都新增一行插入内容x
sed '1,3ax' a
如文件a内容是:
hello
hello.hello
12345123
操作后变为6行:
hello
x
hello.hello
x
12345123
x
换行插入:给所有行后都新增一行插入内容x
sed -i 'ax' a
不换行追加:给第1行后追加内容x
sed -i '1s/$/x/' a
不换行追加:给第2行前插入内容x
sed -i '2s/^/x/' a
不换行追加:给文件每行末尾都追加x(sed)
sed -i 's/$/x/' a
不换行追加:给文件每行末尾都追加x(awk)
awk '{print $0"x"}' a
或
awk '$0=$0"x"' a
注意,此操作(awk)不会实际修改文件。
四,删除操作
注意:下述操作如果只想操作后打印出来而不是真正修改文件,则去掉 -i参数即可。
主要是用d字符删除。
删除空白行
sed -i '/^$/d' a
删除指定行
如删除第1行
sed -i '1d' a
删除最后一行
sed -i '$d' a
删除第2行到第3行
sed -i '2,3d' a
删除第2行到尾行
sed -i '2,$d' a
删除所有以hello开头的行
sed -i '/^hello/d' ?
删除所有包含hello的行
sed -i '/hello/'d a
五,同一sed操作多个条件(不同模式)
-e选项允许在同一行里执行多条命令。
举例如:将第1行替换为x、将文件中123替换为x,将456替换为y,且上述所有操作实际修改到文件
sed -i -e '1c x' -e 's/123/x/g;s/456/y/g' a
可以看到,不同的操作用-e指定,多个替换直接可以在一个-e内完成并可以用分号连接。
六,用另一个文件的内容替换该文件指定内容
-r来指定目标文件。如下,用b文件的内容替换a文件中的所有123
sed -i '/123/r b' a
七,删除文件中每行前的第一个空格
sed 's/^ //g' a
注意,此时仅删除每行开始的第一个空格,如果某行开头有多个空格只会删除第一个。
如要要删除每行前所有空格:
sed 's/^[ ]*//' a
八,删除文件a中每行前的所有空格和所有-符号
文件a内容如下:
#cat a
?aaa
? bbb
-ccc
?ddd
?- eee
操作起来:
sed -i 's/^[ -]*//' a
再次查看:
#cat ccc
aaa
bbb
ccc
ddd
eee
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!