linux shell sed hold space 和lable功能

6月 18, 2020 |

sed 命令的格式为 sed '[address]operation1'

-- sed lable 实现':'替换换行符

echo $'a.jar\nb.jar\nc.jar' |sed ':lable; N; s/\n/:/ ; b lable'
a.jar:b.jar:c.jar

:lable; 定义标签
N 读入下一行
s/\n/:/ 执行':'替换回车符替换
b lable 跳转到lable 定义处重新执行

-- sed 通过hold space实现倒序输出
sed 读入一行到pattern space中,所有的操作指令都是针对pattern space中的哪一行,如果我们需要将多行的内容一起处理,可以将其考到hold space中暂存

echo $'a.jar\nb.jar\nc.jar' |sed -n '1!G;h;$p'
c.jar
b.jar
a.jar

-n 禁止自动输出pattern space
1!G 不是第一行,将hold space的内容追加到pattern space,
h 将pattern space的内容拷贝到hold space
$p 如果是最后一行, 那么输出pattern space的内容到标准输出

echo $'a.jar\nb.jar\nc.jar\nabc def 123 javacoder.cn' |sed -n '/[0-9]\{3\}/p'
abc def 123 javacoder.cn

注sed 支持的为basic regex pattern
基本模式下"?, +, {, |, (, 和 ) "按普通字符处理,如果要使用正则表达式语言,请使用反斜杠转义版本\?, \+, \{, \|, \(,和\)
具体请参考Grep 命令的基本模式和扩展模式

Posted in: Linux

Comments are closed.