Edu*_*ani 6 sed text-processing regular-expression
我想在忽略某些命令的同时运行 shell 脚本,因为它们需要特权。像这样的命令insmod
。所以我用这个过滤脚本,它可以工作(这些命令被替换为true
):
sed -e 's/command1/true/g' -e 's/command2/true/g' -e 's/command3/true/g' ... -e 's/commandN/true/g'
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的表达方式?
使用简单的字符,要将 'a'、'b' 和 'm' 更改为 'x',我可以执行以下操作:
sed -e 's/[abm]/x/g'
Run Code Online (Sandbox Code Playgroud)
或者
tr abm x
Run Code Online (Sandbox Code Playgroud)
(或其tr abm '[x*]'
POSIX 等价物)。但是用字符串?
如果您sed
能够使用非标准-E
选项来理解扩展的正则表达式,您可以使用
sed -E 's/string1|string2|string3/true/g'
Run Code Online (Sandbox Code Playgroud)
与通常支持|
的类型的基本正则表达式不支持的扩展正则表达式功能sed
。
sed
上面的命令将替换三个给定字符串中的任何一个,即使它们作为其他字符串的子字符串出现(例如string1
in string10
)。
为了防止这种情况,还要匹配两边的单词边界:
sed -E 's/\<(string1|string2|string3)\>/true/g'
Run Code Online (Sandbox Code Playgroud)
在 macOS 上,您可能希望使用[[:<:]]
and[[:>:]]
代替\<
和\>
指定单词边界。
顺便说一句,你的s/[a|b|m]/x/g
表达(现在的问题修正)将不仅取代a
,b
并m
用x
也将取代任何|
与文本x
。这与s/[abm|]/x/g
ory/abm|/xxxx/
或tr
命令tr 'abm|' 'xxxx'
和 相同tr 'abm|' '[x*4]'
。