読んで検索しましたが、何が問題なのかわかりません。スペース、文字列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は一度に1行ずつ処理し、各行を処理するときに改行文字を削除します。
$
したがって、目的の操作を実行するには、リテラル改行の代わりに行末アンカー()を一致させる必要があります。
これは働きます:
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
単語の始めと終わりで、幅0の単語境界を\<
それぞれ一致させます。\>
BSDはまた、GNUが単語の境界として理解することを認識sed
します。[[:<:]]
[[:>:]]
sed
\b
sed
入力データには改行文字は表示されません。また、\s
これはGNUにのみ適用されますsed
。基準でスペース文字を一致させるにはsed
リテラルスペースを使用します(スペースまたはタブ文字を一致させるには使用します[[:blank:]]
)。