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は一度に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:]])。

関連情報