我在Cent OS7上写了一个bash脚本.现在我需要用来sed
删除所有不包含的行.jpg
或.jpeg
.
这是我的脚本:
sed -i -e '/\.jp(e)?g/!d' myfile
Run Code Online (Sandbox Code Playgroud)
但它会删除所有行,这意味着它不能按预期工作.
但是,如果我这样做sed -i -e '/\.jpg/!d' myfile
或sed -i -e '/\.jpeg/!d' myfile
.它们都运作良好.
捕获的group(()
)和量词?
(匹配前面的令牌0或1次)来自(至少)ERE(扩展RegEx),而不是BRE(基本RegEx).
sed
默认情况下使用BRE,因此字体处理令牌.
要启用ERE,请使用-E
(或-r
如果可用)sed
:
sed -E '/\.jp(e)?g/!d' myfile
Run Code Online (Sandbox Code Playgroud)
捕获e
在这里是多余的:
sed -E '/\.jpe?g/!d' myfile
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过使用它们来使用来自BRE的ERE令牌\
,因此以下内容也可以使用:
sed '/\.jp\(e\)\?g/!d' myfile
sed '/\.jpe\?g/!d' myfile
Run Code Online (Sandbox Code Playgroud)
同样,这看起来并不像只使用一个选项那样干净-E
.只有你想要这个的情况才是可移植性.