SED命令及示例|第2部分

Sed

我们在《SED命令及示例》中讨论了一些SED命令选项。

SED用于查找、过滤、文本替换、替换以及文本操作,如插入、删除、搜索等。它是Linux/Unix系统提供的一款强大工具。我们可以将SED与正则表达式一起使用。希望你至少具备Linux正则表达式的基本知识。

它提供非交互式文本文件编辑,因此用于自动化编辑,并且有两个缓冲区——模式缓冲区和保持缓冲区。SED_在读取文件时使用_模式缓冲区,逐行读取,当前读取的行被插入到模式缓冲区,而_保持缓冲区_是长期存储,它捕获信息、存储信息,并在需要时重新使用。最初,这两个缓冲区都是空的。SED命令用于在不打开文件的情况下执行不同操作。

SED通用语法:

SED 选项……\[脚本\]\[输入文件……\]

首先创建a.txt文件,我将在其上执行SED命令操作。在本博客中,我使用“a.txt”文件来解释所有示例。如果我写出每个SED命令的输出,博客将变得太长。因此,你可以参考同一文件来最初练习所有命令。

[root@rhel7 ~]# cat a.txt
life isn't meant to be easy, life is meant to be lived.
Try to learn & understand something new everyday in life.
Respect everyone & most important love everyone.
Don’t hesitate to ask for love & don’t hesitate to show love too.
Life is too short to be shy.
In life, experience will help you differentiating right from wrong.

插入空行/空格

1–在每行后插入一个空行–

[root@rhel7 ~]# sed G a.txt

img
2–插入两个空行–

[root@rhel7 ~]# sed 'G;G' a.txt

3–删除空行并在每行后插入一个空行–

[root@rhel7 ~]# sed '/^$/d;G' a.txt

4–在每个匹配“love”的行上方插入一个空行–

[root@rhel7 ~]# sed '/love/{x;p;x;}' a.txt

5–在每个匹配“love”的行下方插入一个空行–

[root@rhel7 ~]# sed '/love/G' a.txt

6–在每行左侧插入5个空格–

[root@rhel7 ~]# sed 's/^/     /' a.txt

为行编号

1–为文件的每一行编号(左对齐)。=用于编号行。\t用于数字和句子之间的制表符–

[root@rhel7 ~]# sed =  a.txt | sed 'N;s/\n/\t/'

2–为文件的每一行编号(编号在左侧,右对齐)。此命令与cat -n filename类似。

[root@rhel7 ~]# sed = a.txt | sed 'N; s/^/     /; s/ *\(.\{4,\}\)\n/\1  /'

3–仅当行不为空时,为文件的每一行编号–

[root@rhel7 ~]#  sed '/./=' a.txt | sed '/./N; s/\n/ /'

删除行

1–删除特定行–

语法:sed‘nd’filename

示例:

[root@rhel7 ~]# sed '5d' a.txt

2–删除最后一行

语法:sed‘d’filename

3–删除从x到y范围的行

语法:sed‘x,yd’filename

示例:

[root@rhel7 ~]# sed '3,5d' a.txt

4–删除从第n行到最后一行

语法:sed‘nth,d’filename

示例:

[root@rhel7 ~]# sed '2,$d' a.txt

5–删除匹配模式的行–

语法:sed‘/pattern/d’filename

示例:

[root@rhel7 ~]# sed '/life/d' a.txt

6–从第n行开始,每隔2行删除一行–

语法:sed‘n2d’filename

示例:

[root@rhel7 ~]# sed '3~2d' a.txt

7–删除匹配模式的行以及之后的2行–

语法:sed‘/pattern/,+2d’filename

示例:

[root@rhel7 ~]# sed '/easy/,+2d' a.txt

8–删除空行

[root@rhel7 ~]# sed '/^$/d' a.txt

9–删除空行或以“#”开头的行–

[root@rhel7 ~]# sed -i '/^#/d;/^$/d' a.txt

查看/打印文件

如果我们想查看文件的内容,那么我们使用cat命令,如果我们想查看任何文件的底部和顶部内容,我们使用head和tail等工具。但是,如果我们需要查看任何文件中间的特定部分呢?这里我们将讨论如何使用SED命令查看任何文件的一个部分。

1–查看从x到y范围的文件–

语法:sed-n‘x,yp’filename

示例:

[root@rhel7 ~]# sed -n '2,5p' a.txt

2–查看整个文件,除了给定范围–

语法:sed‘x,yd’filename

示例:

[root@rhel7 ~]# sed '2,4d' a.txt

3–打印文件的第n行–

语法:sed-n‘address’p filename

示例:

[root@rhel7 ~]# sed -n '4'p a.txt

4–打印从第x行到第y行的行。

语法:sed-n‘x,y’p filename

示例:

[root@rhel7 ~]# sed -n '4,6'p a.txt

5–仅打印最后一行–

语法:sed-n‘’p filename

6–从第n行打印到文件末尾–

语法:sed-n‘n,p’filename

示例:

[root@rhel7 ~]# sed -n '3,$'p a.txt

模式打印

7–仅打印匹配模式的行–

语法:sed-n/pattern/p filename

示例:

[root@rhel7 ~]# sed -n /every/p a.txt

8–打印匹配模式的行,即从输入到第x行。

语法:sed-n‘/pattern/,xp’filename

示例:

[root@rhel7 ~]# sed -n '/everyone/,5p' a.txt

以下打印匹配模式的行,第3行匹配模式“everyone”,因此它从第3行打印到第5行。如果想打印文件到末尾,用替换5。

9–从输入的第x行开始,打印到匹配模式的行。如果未找到模式,则打印到文件末尾。

语法:sed-n‘x,/pattern/p’filename

示例:

sed -n '1,/everyone/p' a.txt

10–打印匹配模式的行以及接下来的x行–

语法:sed-n‘/pattern/,+xp’filename

示例:

sed -n '/learn/,+2p' a.txt

使用SED命令替换

1–更改模式的第一个出现–

[root@rhel7 ~]# sed 's/life/leaves/' a.txt

2–替换行中模式的第n个出现–

语法:sed‘s/old_pattern/new_pattern/n’filename

示例:

[root@rhel7 ~]# sed 's/to/two/2' a.txt

我们写“2”是因为我们替换了第二个出现。同样,你可以根据需要使用3、4等。

3–替换行中模式的所有出现。

[root@rhel7 ~]# sed 's/life/learn/g' a.txt

4–从行中的第n个出现替换到所有出现。

语法:sed‘s/old_pattern/new_pattern/ng’filename

示例:

[root@rhel7 ~]# sed 's/to/TWO/2g' a.txt

注意–此SED命令替换行中“to”的第二个、第三个等出现为“TWO”。

如果你只想打印替换的行,那么使用“-n”选项与“/p”打印标志一起仅显示替换的行–

[root@rhel7 ~]# sed -n 's/to/TWO/p' a.txt

如果你想打印替换的行两次,那么只使用“/p”打印标志而不使用“-n”选项–

[root@rhel7 ~]# sed 's/to/TWO/p' a.txt

5–在特定行号上替换模式。这里,“m”是行号。

语法:sed‘m s/old_pattern/new_pattern/’filename

示例:

[root@rhel7 ~]# sed '3 s/every/each/' a.txt

如果你想只打印替换的行–

[root@rhel7 ~]# sed -n '3 s/every/each/p' a.txt

6–在定义的行范围内替换字符串–

语法:sed‘x,y s/old_pattern/new_pattern/’filename

其中,

x=起始行号

y=结束行号

示例:

[root@rhel7 ~]# sed '2,5 s/to/TWO/' a.txt

注意–如果我们想将模式替换到文件的最后一行,可以用“”替换“y”。

示例:

[root@rhel7 ~]# sed '2,$ s/to/TWO/' a.txt

7–如果你想替换模式以忽略字符大小写(以大写或小写字母开头),则有两种方式可以替换此类模式–

首先,使用“/i”打印标志–

语法:sed‘s/old_pattern/new_pattern/i’filename

示例:

[root@rhel7 ~]# sed 's/life/Love/i' a.txt

其次,使用正则表达式–

[root@rhel7 ~]# sed 's/[Ll]ife/Love/g' a.txt

8–将多个空格替换为一个空格–

[root@rhel7 clang]# sed 's/  */ /g' filename

9–替换一个模式后跟另一个模式–

语法:sed‘/followed_pattern/s/old_pattern/new_pattern/’filename

示例:

[root@rhel7 ~]# sed '/is/ s/live/love/' a.txt

10–除第n行外,替换一个模式为另一个模式。

语法:sed‘n!s/old_pattern/new_pattern/’filename

示例:

[root@rhel7 ~]# sed -i '5!s/life/love/' a.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值