关于后端:005-Linux-命令三剑客之sed

49次阅读

共计 2325 个字符,预计需要花费 6 分钟才能阅读完成。

  • grep:数据查找定位
  • awk:数据切片,数据格式化,性能最简单
  • sed:数据批改

01 Linux 命令三剑客?

三剑客各有千秋,和锅锅一一搞起就是了!

  • sed:善于数据批改。
  • grep:善于数据查找定位。
  • awk:善于数据切片,数据格式化,性能最简单。
    sed(全称:Stream Editor),善于对文件做数据做批改的操作,十分高效。这里总结一些增删改的根底用法。

02 不必 vim 怎么在文件开端增加内容呢?

  • 应用 vim 须要在文件外部编辑,有时只是想在文件底部增加一句话或一个参数,须要经验 vim [文件] ->G(挪动到底部)->o 下一行增加 -> 编辑内容 -> 保留退出。
  • 这个步骤真麻烦,sed 能够轻便的实现这些性能!
  • ps: 其实还有个 echo 命令也有这个性能,echo “ 文件内容 ” >> [文件名]。

03 增(追加),内置命令字符 a

应用示例:

  • sed -i ‘$a 哈哈哈 ’  info.log #在文件开端追加 ” 哈哈哈 ” 字符串。
  • sed -i ’20a 啦啦啦 ’ info.log  #在文件【info.log】第 20 行字符下一行,追加字符串“啦啦啦”。
  • sed -i ’20i 啦啦啦 ’ info.log  #在文件【info.log】第 20 行字符上一行,追加字符串“啦啦啦”。
  • sed -i ‘a 嘎嘎 ’  info.log  #在文件【info.log】每行字符下一行追加字符串“嘎嘎”。
  • sed -i ‘i 大大 ’  info.log  #在文件【info.log】每行字符上一行追加字符串“大大”。
  • sed -i ‘1i 第一行啦 ’  info.log  #在文件【info.log】结尾插入字符串“第一行啦”。
  • sed -i ‘/book/a  HH’  info.log #匹配蕴含 book 的行,并在其后增加 book。

04 改(替换),内置命令字符 s

应用示例:

  • sed -i ‘s/book/books/’  info.log  #把【info.log】文件里第一个 ”book” 替换为 ”books”。
  • sed -i ‘s/book/books/g’ info.log #把【info.log】文件里所有的 ”book” 替换为 ”books”。

05 删,内置命令字符 d

应用示例:

  • sed -i ‘2d’ info.log #删除【info.log】文件的第二行。
  • sed -i ‘1,3d’ info.log  #删除【info.log】文件的 1 到 3 行。
  • sed -i ‘/^ 啦啦啦 /,/$HH/d’  info.log  #删除【info.log】中以 “ 啦啦啦 ” 结尾始终到以 ”HH” 结尾的行。
  • sed -i ‘/^$/d’ info.log #删除所有的空白行

06 内置命令 s (替换作用)高级应用

(1)替换命令的格局

sed [选项] s/[pattern]/[replace]/[flags]

[选项]罕用的几个参数:

  • -f #script-file 从文件中读取脚本指令,对编写主动脚本程序很实用。
  • -i #该选项将间接批改源文件,否则所有的操作对文件都不失效哦,当然线上应用的时候要审慎!
  • -e #script 容许多个脚本指令被执行。

[pattern]
含意: 待匹配的须要替换的内容。

[replace]
常见的非凡含意字符:

  • & # 用正则表达式匹配的内容进行替换。
  • \  # 本义(本义替换局部蕴含:&、\ 等)。

[flags]
常见的可选参数:

  • -n # 1-512 之间的数字,示意对 [pattern] 中指定内容第 n 次呈现进行替换。如一行中有 3 个 H,而只想替换第二个 H。
  • -g # 对 [pattern] 中指定的内容进行全局更改。没有 g 则只有第一次匹配被替换。

(2)多个 sed 命令执行

多个 sed 命令顺次执行,用分号宰割或加选项 -e,
应用示例:

  • sed ‘s/yes/no/;s/static/dynamic/’  info.log  # 示例 1,同时指定了 2 个 sed 命令。
  • sed -e ‘s/yes/no/’ -e ‘s/static/dynamic/’  info.log  #示例 2,同时指定了 2 个 sed 命令。

(3)实际 sed 搜查替换

把 test.html 文件中的第二个 <body> 替换为 </body>

<html>
<body>Hello the World!<body>
</html>

剖析理论就是把第二个 body 替换为 /body,命令如下。

sed -i 's/body/\/body/2'  test.html

(4)实际 sed,写一个脚本实现替换性能

把 test.html 文件中的第二个 <body> 替换为 </body>

<html>
<body>Hello the World!<body>
</html>

剖析理论就是把第二个 body 替换为 /body,命令如下。
编写执行脚本的步骤如下:

touch sed.sh
sed.sh 中写入脚本内容:

#sed 替换脚本
s/body/\/body/2

对 sed.sh 脚本赋予可执行权限
chmod ug+x sed.sh

执行 sed.sh 脚本,对文件进行解决
sed -i -f sed.sh  test.html

07 小结

  • (1)内置命令字符,即下面单引号内的的 i(insert)、a(append)、s(search&replace)、d(delete),插入、追加、替换、删除,别离小结了其用法。
  • (2)$ 代表文件开端,^ 代表文件结尾。
  • (3)sed 的 -i(留神这个是可选参数,和单引号内的 i 不是一个含意啦。)选项能够间接批改文件内容,这性能十分有帮忙!如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时应用 vim 可能会疯掉!sed 命令却能够十分高效率的来干这个!
  • (4)此外还介绍了 sed 的内置命令 s 的高级用法,sed 最善于的就是数据批改!锅锅就说到这里,下期见!

「不甩锅的码农」原创,转载请注明起源,未经受权禁止商业用途!同名 GZH 请关注!

正文完
 0