sed 分版本的! 个别命令不通用:比如 i 上一行插入,有些就得用G参数 sed 分版本的! 个别命令不通用:比如 i 上一行插入,有些就得用G参数 sed 分版本的! 个别命令不通用:比如 i 上一行插入,有些就得用G参数

SED: stream editor,流编辑器. sed基本上就是玩正则模式匹配. 主要用于 文本操作 参考资源 CN

在Script执行过程中 动态修改文件的做法.称为流编辑. sed 是一种非交互式的流编辑器. 可动态编辑文件. sed 处理的对象是 文件的 数据流/stream sed 工作模式: 比对 每一行 数据.符合样式就执行指定的操作 学Sed AWK 之类之前. 必须先掌握正则式表达. sed 默认处理的不是源文件 而是源文件的拷贝

原文件修改 -i (默认是修改副本的)

➜ Desktop sed -i ‘s/$/xujian/’ 1.txt

文件导出 > new file name

➜ Desktop sed ‘s/$/xujian/’ 1.txt > changed.txt 每行行尾都加上xujian 后 导出到新的文本.

sed 语法 sed ‘样式命令’ 文件名

如果某一行符合样式就执行指定的 sed命令.如 删除(d) 或取代(s).

样式命令 用一对// 表示寻找的意思,也可以指定数据行的范围. /AAA/,/DDD/ 表示: 作用范围从 含有 AAA的数据行 到 含有DDD 的数据行.

d 删除

sed '1,4d' 1.txt 删除 1-4行 sed '2,$d' 1.txt 删除 2-尾行.

sed '/get/d' 1.txt 删除 所有包含get的行.

sed '/[0-9]\{3\}/d' 1.txt 删除含有3位数 的行.[0-9]:匹配数字,\{3\}:3个字符.

sed '/^&/d' 1.txt 删除空行: ^表示开头,&表示结尾. 两者之间没有任何字符.代表空行

sed '/now/!d' 1.txt 删除 不含有now的行. ! 是不的意思.

sed -n 's/Day//p' 1.txt Day 改成空字符串.也就是删除 sed -n 's/^...//p' 1.txt 每行开头前三个字符删掉. sed -n 's/...$//p' 1.txt 删除每行行尾3个字符.

p 显示 print n: 只print 有修改的行

p 显示目前的数据. 默认也会显示不符合的数据行. 要只显示符合样式的数据行: n 参数: 抑制默认操作.

sed -n '/Day/p' 1.txt 显示包含Day的行.

e 执行的意思

比如要输入 文字. 你想预先在代码里面输入好. 就需要e

C 替换行?? :

sed '/Day/c myWholelineChanged' 1.txt 包含 Day的 整行 变成后面的 myWholelineChanged ??????

分行: 一行中某处断开变两行

➜ Desktop echo foo | sed ‘s/f/f
pipe quote> /’ f oo

主要参数

e 执行命令行中的指令: sed -e ‘command’ file f 执行一个sed 脚本文件中的指令: sed -f scriptfile files n 读取下一行到 pattern space i 和e的区别是. e不会修改原文件的内容.只会显示修改在bash中,而i会直接修改源文件. sed 规则: 从最长的最左边的子字符串. ! 表示不含有

S 替换

➜ Desktop sed "s/con/xujian/g" 1.txt → //xujiansole.log(now.getMillisexujiands()); 每一行的 con 都替换成 xujian 哪怕一行有多个con ➜ Desktop sed "s/con/xujian/" 1.txt → //xujiansole.log(now.getMilliseconds()); 每一行的 con 都替换成 xujian 一行只替换一次!!!

➜ Desktop sed "3s/now/before/" 1.txt 第三行的 now 替换成 before ➜ Desktop sed "3,6s/now/before/" 1.txt 3-6行的 now 替换成 before

➜ Desktop sed "s/o/O/1" 1.txt 只替换每一行的 第1个o 变成大写O ➜ Desktop sed "s/o/O/3" 1.txt 只替换每一行的 第3个o 变成大写O

➜ Desktop sed "1,3s/con/Con/g; 3,6s/sole/Sole/g" 1.txt 1-3行的 con 变成Con ; 3-6行的 sole变成Sole.

添加空行

sed '/regex/{x;p;x;}'   上面插入一空行 sed '/regex/G' 下面插入一空行 sed '/regex/{x;p;x;G;}' 上下各插入一行 

sed '1{x;p;x;}' 1.txt 首行之上加空行 sed '$G' 1.txt 尾行之下加空行

sed G 1.txt 在每行下面添加一新行. sed '2G' 1.txt 在第二行下加空行 sed '1,2G' 1.txt 在一二行下添加空行.

修改空行

sed 's/^$/xxx/' 1.txt 所有空行 变成 xxx

 sed '1s/^$/xxx/' 1.tx 首行 变成xxx  sed '$s/^$/xxx/' 1.tx 尾行 变成xxx

复合功能

sed -n 's/Day/day/p' 1.txt Day 改成 day 并显示出来. 每行只改一次. sed -n 's/Day/day/pg' 1.txt Day 改成 day 并显示出来. 每行有多少改多少

sed -n 's/\(Day\)/\1Time/p' 1.txt

  • 把找到的Day存起来 (比如会找到很多day行.)
  • 把第一个出现的Day 替换成 Daytime
  • 显示这些含有Day的行

先匹配样式 再操作

sed -n '/Day/s/123/789/p' 1.txt 先找到含有Day的行. 这写行里面的 123 替换成789

sed -n '2,4s/B/Black/p' 1.txt 2-4行的 B 替换成Black sed -n '/Day/,/Time/s/console/Console/p' 1.txt 含有Day 到含有Time 的那几行. 其中的console 替换成Console.

实际应用:

修改配置文件:

  • 开启或者关闭某个选项
  • 添加行等等

例子:

示范文本 1.txt ~~~ var now = new Date(); console.log(now); console.log(now.getFullYear()); console.log(now.getMonth()); console.log(now.getDate()); console.log(now.getDay()); console.log(now.getHours()); console.log(now.getMinutes()); console.log(now.getSeconds()); console.log(now.getMilliseconds()); console.log(now.getTime());

sed G 1.txt 在每行后面(下面)增加一空行 sed `G;G` 1.txt 在每行后面(下面)增加两空行

显示第1行 sed q 1.txt 显示前3行

  • sed 3q 1.txt
  • sed -n '3p' 1.txt

显示2-5行 sed -n '2,5p' 1.txt

每行行首添加5个空格 sed 's/^/ /' 每行行首添加hello sed 's/^/hello/' 每行行尾添加… sed 's/$/.../'

删除第1行: sed '1d' 1.txt 删除前10行: sed '1,10d' 1.txt 删除最后一行: sed '$d'

删除文件顶部的所有空行 sed ‘/./,$!d’

显示倒数两行 sed ‘$!N;$!D’ 显示最后一行 sed ‘$!d’ 显示文件中的倒数第二行 sed -e ‘$!{h;d;}’ -e x # 当文件中只有一行时,输入空行 sed -e ‘1{$q;}’ -e ‘$!{h;d;}’ -e x # 当文件中只有一行时,显示该行 sed -e ‘1{$d;}’ -e ‘$!{h;d;}’ -e x # 当文件中只有一行时,不输出

计算行数 sed -n ‘$=’