Sed的使用-Linux 如何使用Sed命令进行文本处理 linux01

  • 创建测试文本
    首先vim test.txt创建一个测试语句,其中输入文本:
this is a test
1line
2line

使用wq!保存并退出。
使用cat -A test.txt查看测试文件内容:

cat.png

cat -A呢不仅可以查看完文本,还能查看文本中隐藏的分隔符等信息,比如上图中每一行结尾的$代表着结尾换行符。

  • sed的使用结构
sed [-nefri] [处理] 待处理的文件

1.选项[-nefri]中的-n

sed命令在对文本进行处理后,会默认把处理过的所有文本标准输出到屏幕上,使用-n命令则可以只输出文本中被处理过的行。

[处理]通常使用两个单引号包裹双下划线'/正则等处理/'来使用,是通常哈,有时候也没有双下划线,但两个单引号必有。

1.sed -n '/带匹配字符/p' 待处理的文件

输入命令sed '/line/p' test.txt
这里先解释一下,sed的处理是包裹在两个单引号和下划线之间的,这里的'/line/p'代表匹配包含字母line的行,p则代表输出print,连起来的意思就是匹配待处理文件中包含字母line的行并打印该行:

image.png

那么为什么除了打印匹配到line的行以外还把原始的所有内容给打印了呢?这是因为sed默认将处理过的原始文本也输出到屏幕上,这里没对原始文本进行增删改,只是,因此原始文本也原封不动地输出。
那么加上-n就能仅输出被处理的内容:
输入命令sed -n '/line/p' test.txt

image.png

2.选项[-nefri]中的-e

-e代表直接在命令模式上进行sed的操作编辑,主要作用是可以在一行执行多个处理操作。

对以下命令进行解析:

sed -e '1,2p' -e '1,2athis is a new line' test.txt

首先看sed -e '1,2p' test.txt是什么意思哈:

image.png

它是实现了打印第一行和第2行的操作,当然由于没有使用-n,原始文本也被打印了出来,那么加上-n试试:
image.png

说明第一节讲得没错哈。接下来看sed -e '1,2athis is a new line' test.txt
image.png

它是在第一行和第二行之间插入了新的一行this is a new line,那么盲猜1,2athis is a new line1,2后的那个a是代表插入新内容吧(不记得了)。
所以连起来sed -e '1,2p' -e '1,2athis is a new line' test.txt则是执行了两种操作:
image.png

3.选项[-nefri]中的-f

-f 直接将sed的操作写在一个文件夹内。

4.选项[-nefri]中的-r

-r 代表使用扩展正则表达式的语法。
正则表达式前面有讲过正则匹配-JS正则表达式的使用-method01 - 简书 (jianshu.com)

这里简单提一下:

+一个或者多个
? 0个或者一个
|(or)的方法找出整个字符串
() 捕获
()+ 捕获的重复

sed 's/\([0-9]\) \([a-z]\)/\1\t\2/g' test.txt #在数字与字母间插入tab

sed -r 's/([0-9]) ([a-z])/\1\t\2/g' test.txt #使用扩展正则,捕获的()不用\转义

5.选项[-nefri]中的-i

-i 直接修改读取的文件内容,而不是由屏幕输出。

[处理]说明

'[n1,{n2}] function' #sed 执行的处理需要放在单引号之中,
n1,n2 不一定会存在,代表被处理的行数。
function包括:

a 新增,a的后面接新增的字符,这些字符会出现在目前行的下一行。

新增多行内容

sed '1,2athis is a new line' test.txt #在第1/2行之后新加一行内容

this is a test
this is a new line
1line
this is a new line
2line

$sed '1,2athis is a new line\
>this is another new line' test.txt #新加多行内容:反斜杠回车后继续写

this is a test
this is a new line
this is another new line
1line
this is a new line
this is another new line
2line

除此以外:

c 替换,c的后面接字符,这些字符会替换n1,n2行之间的内容。
d 删除。
i 插入,i后面接字符,这些字符会插入到当前行的上一行。
p 打印。
s 替换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容