网站、APP、小程序、软件、硬件定制开发,联系QQ:99605319

文章目录


sed是一个流编辑器,用于对文件或输入流执行各种文本转换,功能强大且效率高。

主要用于对数据行进行替换、删除、新增、修改等。

一、sed 语法格式

sed [-nefri] 'command' 输入文本

参数选项

常见参数说明
-n抑制输出,结合p指令打印特定行。
默认sed会列出所有指定内容,加上 -n 参数后,则只有经过sed 特殊处理的那一行才会被列出来。
-i直接修改文件内容,而且不进行任何输出,慎用!
默认情况下 sed 并不直接修改文件内容,只是把结果进行标准输出,文件内容实际没有变化。
-e使用后面的动作指令编辑文件内容
-f直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

动作指令

  • 使用时要用单引号把动作指令内容括起来;

  • 若指令内容包含变量,则用双引号括起来。

常用动作说明
pprint,打印,列出指定的内容,通常与 -n 参数一起使用
aafter,新增,后面接字符串,并显示在新的一行(目前的下一行)
iinsert,插入, 后面接字符串,并显示在新的一行(目前的上一行)
cchange,替换一行或多行的整行内容,后面接字符串,用于取代 n1,n2 之间的行
ssupersede,stead,替换一行或多行中的部分内容,通常搭配正规表达式
常用方式: 1,20s/old/new/g
ddelete,删除,后面通常不接任何字符

二、参数使用举例

(假设我们有一文件名为input)

1、输入文件的几种方式

sed 命令中的文件参数可以是文件名,也可以是来自管道的输入。

下面几种方式是等价的:

sed 's/hello/world/g' input > output
sed 's/hello/world/g' < input> output
cat input | sed 's/hello/world/g' - > output
cat input | sed 's/hello/world/g' > output   # - 可以省略

2、-n 抑制输出

默认情况下,sed打印所有已处理的输入(已通过命令修改/删除的输入除外)。

使用 -n 抑制输出,结合p指令可以打印特定行。

仅打印输入文件的第45行:
sed -n '45p' input

3、-i 修改文件内容且不进行输出

  • 直接修改文件内容,而且不进行任何输出,慎用!
  • 可以与其它指令结合使用。

  • 单独使用其它参数和指令都不会直接修改文件内容。

  • 当文件很大时,使用类似 vim 的命令修改文件很不方便,此时使用 sed -i 就非常方便,可以不用打开文件,直接实现修改/取代的功能。

查看input文件原内容:

$ cat input
hello ehllo hello
hello abadbsabf
a123gdsgahello

sed 不带 -i 参数时进行替换指令

会输出替换后的结果,且再次查看input内容,原文件未修改。

# sed 替换
$ sed 's/hello/world/' input 
world ehllo hello
world abadbsabf
a123gdsgaworld

# 查看input内容,并未真正修改
$ cat input 
hello ehllo hello
hello abadbsabf
a123gdsgahello

sed -i 进行替换指令

不会输出任何内容,且再次查看input内容,原文件直接被修改了。

$ sed -i 's/hello/world/' input 

$ cat input 
world ehllo hello
world abadbsabf
a123gdsgaworld

sed -i 使用正则表达式匹配

  • 使用sed -i 's/\.$/\!/g'将结尾为.的行替换成以!结尾

$ cat input.txt 
  google.
  taobao.
  zhihu-
$ sed -i 's/\.$/\!/g' input.txt
$ cat input.txt 
  google!
  taobao!
  zhihu-
  • 使用sed -i '$a # This is a test'直接在文件最后一行增加 # This is a test:

(这个命令把选项 -i 和指令 a 结合使用,同时其中 $ 代表最后一行,从而实现直接修改文件,在最后一行后面新增内容。)

$ sed -i '$a # This is a test' input.txt
$ cat input.txt 
  google!
  taobao!
  zhihu-
  # This is a test

4、-e 和 -f 指定脚本

4.1 语法:

-e 指定动作集(两种方式一样):

  • -e script

  • –expression=script

-f 指定动作文件(两种方式一样):

  • -f script-file

  • –file=script-file

4.2 下面几种示例是等价的:

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt

style='box-sizing: border-box; outl

评论(0条)

请登录后评论
ziyuan

ziyuan Rank: 16

0

0

0

( 此人很懒并没有留下什么~~ )

首页

栏目

搜索

会员