我有一个字符列表:
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