您的位置:首页 > 运维架构 > Shell

shell高级脚本 ---sed高级编程

2018-01-20 16:00 597 查看
shell —sed高级编程

一、 xargs

find . -type d -link 2 | xargs -i mkdir -p {}/e  =》创建文件夹e


二、sed高级编程

sed: stream editor 流编辑器,一行一行的读取文本内容

1、例子

文件yourfile
aaa
123
123
123
123
eee

Command: sed -i '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' youfile
explain: 先匹配aaa, 匹配到后执行大括号里的语句
n: 读取下一行
s/123/xyz/g: 将123替换为xyz,全局替换,同一行中出现几次替换几次
:a -> 设定跳转标签a
/eee/!ba -> 若当前行匹配不上eee,则跳转到标签a处继续执行,构成一个循环。若匹配到eee,则退出循环,sed重新对读入的每行匹配aaa
由于sed没有加-n静默选项,所有默认对每行数据处理后都打印


2、 h\H\g\G\x!\n\N\p\P(大写)-e

h: 拷贝pattern space的内容到holding buffer
H: 追加pattern space 的内容到holding buffer
g: 获取holding buffer 的内容,并替换pattern space
G: 获取holding buffer 的内容,并追加pattern space
!: 表示后面的命令对所有没有被选定的行发生作用
x: 互换pattern space和holding buffer中的文本
n:读取下一行文本到pattern space,并从下一条命令而不是第一条命令开始对其处理,并且p打印只针对新加入的行
N: 读取下一行文本到pattern space并将pattern space空间中的行当做一行处理,p打印针对所有的行
P: 打印pattern space中的第一行(大写)
p: 打印pattern space中的最后一行
-e:  允许多点编辑 如: sed -e '/test/h' -e '$G' file -> 读取file中的所有的行,一次读取一行,当读取的当前行匹配test时,将行替换holding模式空间内容(h),当读取到最后一行($)时,将holding空间中的内容追加到模式空间(G),并默认数据
-n: 使用安静模式,在一般sed的用法中,所有来自stdin的资料一般都会被列出到屏幕上,加-n后,则不会输出,除非用p命令


sed中的n\N参考

参考2

参考3

sed参考4

3、 例子

// file
aaa bbb
432
aaa
1234343
bbb
34534
Demand: 获取aaa和bbb之间的内容,并打印出来
Command2: sed -n '/aaa/{/bbb/ba;:c;N;/bbb/!bc;p;b;:a;p;}' file
explain: 读取文件file,若当前行命中aaa,且当前行命中bbb,则跳转到标签a处执行打印(不跨行);否则,读取下一行,并判断是否命中bbb,如果没有命中,则跳转到标签c处,并继续判断是否命中bbb,如果命中了,则打印,并跳转到结尾


参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell sed