Sed 笔记

流式处理,即按行处理。读入一行处理完输出之后再读入下一行进行处理。

命令格式:

1
sed [OPTION]... {script-only-if-no-other-script} [input-file]...

参数说明:

以下引用自菜鸟教程

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息。
  • -i将结果应用到源文件。

指令说明:

以下引用自菜鸟教程

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)。
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。
  • d :删除,因为是删除啊,所以 d 后面通常不接任何内容。
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)。
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

命令实验

行定位

  • 定位一行: x;/正则/
  • 定位几行,范围定位:x,y;/正则/,x;/正则/,/正则/;x,y!取反。
  • 间隔行定位: first~step,选择从first行开始,每隔step行。
  • sed -n 'p' file : 打印文件内容并去除不相关行。
  • sed -n '5p' file : 打印文件第五行。
  • sed -n '5,10p' file : 打印文件第5到10行的内容。
  • sed -n '5,10p' file : 打印文件第5到10行之外的内容。

修改内容

基本修改

  • sed '30a helllo' file: 在第30行后面新增一行,内容为 hello。
  • sed '30i helllo' file: 在第30行前面新增一行,内容为 hello。
  • sed '30c helllo' file: 替换第30行的内容为 hello。
  • sed '30d' file: 删除第30行。
  • sed '$a line1 \n line2' file:在文档结尾追加两行内容。
  • sed '/^$/d' file:删除空行。主要在于正则找到空行。

字符替换

  • sed 's/old/new/g' file:把正则 old 替换为字符串 new 。不加 g 每行只被替换一次。
  • sed 's/^$/new/g' file:把空行全部替换为 new 。

高级操作

  • {cmd;cmd}:{}应用多个命令,用;隔开。 sed '{29d;s/1000/2000/g}' 删除 29 行并将 1000 替换为 3000。
  • n 读取下一行并用下一个命令处理。sed -n '{n;p}' file 打印偶数行。 sed -n '{p;n}' file 打印奇数行。
  • & 代替固定字符串:sed 's/xxx/&yyy/g' file。将 xxx 替换为 xxxyyy。& 代表前面的 xxx 。
  • \u \l: 首字母大小写转换。sed 's/m:x/\u&xxx/' file 将 m:x 替换为 m:xxxx 并且首字母 m 转换为大写。\l 首字母小写。
  • \U \L: 多个字符大小写转换。sed 's/.*\W.*/\U&/g' file 把文件所有单词转换为大写。
  • 正则()中的内容可以使用\1 \2等来引用。\(\) \(\) \1 \2: sed 's/\(w1\)\(w2\)/\1x\2y/g'w1 w2 替换为 w1x w2y
  • r 复制指定的文件插入到匹配行后面。sed '7r 1.txt' p.txt 将 1.txt 中的内容插入到 p.txt 的第7行后面。
  • w 复制匹配行到文件中。sed '1w 1.txt' p.txt 拷贝 p.txt 中的第一行写入到 1.txt 中。1.txt 中原有文件内容将会被清空。
  • q 退出,不再处理后续内容。sed '2q' p.txt 执行到第二行后退出。
updatedupdated2020-11-152020-11-15
加载评论