Linux 如何使用Sed命令进行文本处理 2022-07-18

2022-07-17  本文已影响0人  一车小面包人

使用cat查看测试文件内容:

$cat test.txt
this is a test
1line
2line
sed [-nefr] [操作]

选项[-nefr]

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

1.sed -n '/带匹配字符/p' 文件名

$sed '/a/p' test.txt
this is a test
this is a test
1line
2line
$sed -n '/a/p' test.txt
this is a test

p代表的是print:打印文本中的每一行内容和/带匹配字符/中匹配到的内容;/a/代表匹配包含a的行;
因此默认会输出文本的所有行和匹配到的包含a的行,即包含a的行会输出两次;
但如果加上-n,就会仅打印匹配到包含a的行。

-e 直接在命令模式上进行sed的操作编辑,可以在一行执行多条命令。

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

-f 直接将sed的操作写在一个文件夹内。
-r 代表使用扩展正则表达式的语法。

2.-r 扩展正则表达式

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

$sed 's/\([0-9]\)\([a-z]\)/\1\t\2/g' test.txt   #在数字与字母间插入tab
this a test
1  line
2  line
$sed -r 's/([0-9])([a-z])/\1\t\2/g' test.txt   #使用扩展正则,()不要\转义
this a test
1  line
2  line

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

[操作]说明

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

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

3.新增多行内容

$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 替换。

上一篇下一篇

猜你喜欢

热点阅读