sed 中匹配空格或换行符

sed 中匹配空格或换行符

我已经阅读和搜索,但我不明白它有什么问题,我想匹配:一个空格,字符串00011,以及一个空格或一个新行。

sed 's:\(\s\)\(00011\)\([\s\n]\):\1$03\3:g'

编辑:数据如下所示:

ADD    00000 00001 00011
LSH    00011 00100 01111
ADD    00011 10100 00010
JSR    00011101000111010101100010

并且$03只是一个字符串来替换00011

我想得到这样的结果:

ADD    00000 00001 $03
LSH    $03 00100 01111
ADD    $03 10100 00010
JSR    00011101000111010101100010

谢谢

答案1

sed 一次处理一行,并且在处理每一行时它会去除换行符。

因此,为了执行您想要的操作,您应该匹配行尾锚点 ( $) 而不是文字换行符。

这应该有效:

sed 's:\(\s\)\(00011\)\(\s\|$\):\1$03\3:g'

答案2

$ sed 's/\<00011\>/$03/g' file
ADD    00000 00001 $03
LSH    $03 00100 01111
ADD    $03 10100 00010
JSR    00011101000111010101100010

\<分别\>匹配单词开头和结尾处的零宽度单词边界。 BSDsed也会识别[[:<:]]and [[:>:]],GNUsed也将其理解\b为单词边界。

sed永远不会在输入数据中看到换行符。另外,\s是特定于 GNU 的sed。要匹配标准中的空格字符,sed只需使用文字空格(要匹配空格或制表符,请使用[[:blank:]])。

相关内容