我已经阅读和搜索,但我不明白它有什么问题,我想匹配:一个空格,字符串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:]]
)。