onl*_*rra 9 sed regular-expression
我已阅读并搜索,但我不明白它有什么问题,我想匹配:一个空格,字符串 00011,以及一个空格或一个新行。
sed 's:\(\s\)\(00011\)\([\s\n]\):\1$03\3:g'
Run Code Online (Sandbox Code Playgroud)
编辑:数据如下所示:
ADD 00000 00001 00011
LSH 00011 00100 01111
ADD 00011 10100 00010
JSR 00011101000111010101100010
Run Code Online (Sandbox Code Playgroud)
并且$03
只是一个字符串来替换00011
我想以这样的方式结束:
ADD 00000 00001 $03
LSH $03 00100 01111
ADD $03 10100 00010
JSR 00011101000111010101100010
Run Code Online (Sandbox Code Playgroud)
谢谢
sed 一次在一行上工作,它会在处理每一行时去除换行符。
因此,为了执行您想要的操作,您应该匹配行尾锚点 ( $
) 而不是文字换行符。
这应该有效:
sed 's:\(\s\)\(00011\)\(\s\|$\):\1$03\3:g'
Run Code Online (Sandbox Code Playgroud)
$ sed 's/\<00011\>/$03/g' file
ADD 00000 00001 $03
LSH $03 00100 01111
ADD $03 10100 00010
JSR 00011101000111010101100010
Run Code Online (Sandbox Code Playgroud)
的\<
和\>
在一个单词的开始和结束的零宽度字边界匹配分别,。BSDsed
也会识别[[:<:]]
和[[:>:]]
,而 GNUsed
也将其理解\b
为单词边界。
sed
永远不会看到输入数据中的换行符。此外,\s
特定于 GNU sed
。要匹配标准中的空格字符,sed
只需使用文字空格(要匹配空格或制表符,请使用[[:blank:]]
)。