在 sed 中对字符列表进行正则表达式处理

在 sed 中对字符列表进行正则表达式处理

我有一个字符列表:

11183 11183 1 0 0 0 0 false -- "-"

如果我想取所有直到假(包括)grep我用:

grep -o '[0-9].* [a-z]* '

中的模拟量是什么sed

答案1

sed命令将返回.*从行首 ( ^) 开始的任何内容 ( ),直到(包括)第一次出现的false不包括其余部分 ( .*$) 的内容。

sed -r 's/^(.*\<false\>).*$/\1/'

答案2

此正则表达式的语法sed相同。例如,如果要替换与此正则表达式匹配的字符串,可以按以下方式使用替换命令(s/<old>/<new>/):

$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed 's/[0-9].* [a-z]* /_THE_NEW_STRING_/'
_THE_NEW_STRING_-- "-"

当然,您可以使用扩展的正则表达式-r--regexp-extended在某些情况下让您的生活变得轻松:

$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed -r 's/([0-9].* [a-z]* ).*/\1/'
11183 11183 1 0 0 0 0 false 

$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed -r 's/([0-9].* [a-z]* )(.*)/\2 \1/'
-- "-" 11183 11183 1 0 0 0 0 false 

相关内容