linux sed命令操作大全

2023-12-22 15:05:18

?经常使用,但有些总记不全,有时候经常查找,这次全部捋清楚做备忘,有需要的小伙伴欢迎收藏起来哦!

查、增、改、删一应俱全,非常详细!

目录

一、查看

查看第2行

查看第2行到第3行

查看第1行、第3行

查看从第2行开始到文件结束的内容

查看文件中包含指定字符的行

查看文件中包含指定字符的行数

二、文本内容替换

1,替换每行第一个出现的指定内容

2,全局替换

3,全局替换:按每行

4,全局替换:按指定行数

情景1:替换的范围是相连的几行或1行

情景2:替换的范围是不相连的几行

5,关于定界符

6,替换包含斜杠、反斜杠的内容

方案1

方案2

特殊情况:如果要替换的既包含/又包含\

特殊情况:斜杠替换为反斜杠

7,替换包含引号、单引号的内容

双引号替换为x

单引号替换为x

单引号替换为双引号

8,替换仅为了打印查看效果,不修改原文件时

9,一次替换多个原内容

10,替换整行内容

情景1:整体替换、行数可能变化

情景2:整体替换指定行、行数不变

方法1

方法2

情景3:操作行替换的是不相连的几行

11,替换的内容中包含中括号[]的

三,追加&插入

?换行插入:给第1、2、3行的每行后都新增一行插入内容x

换行插入:给所有行后都新增一行插入内容x

不换行追加:给第1行后追加内容x

不换行追加:给第2行前插入内容x

不换行追加:给文件每行末尾都追加x(sed)

不换行追加:给文件每行末尾都追加x(awk)

四,删除操作

删除空白行

删除指定行

五,同一sed操作多个条件(不同模式)

六,用另一个文件的内容替换该文件指定内容

七,删除文件中每行前的第一个空格

八,删除文件a中每行前的所有空格和所有-符号


一、查看

注意,下面每条指令中最后的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

文章来源:https://blog.csdn.net/HYZX_9987/article/details/135151505
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。