Gnu Sed:空白文字クラスが行末文字と一致しません。

Gnu Sed:空白文字クラスが行末文字と一致しません。

パターン:abcの後にスペースまたは行の最後の文字が続きます。

orig="abc[[:space:]]+";
new=Hello
sed -i -r -e "s|${orig}|${new}|g" ./file ;

文書:

abc
abcd
abc

abc d

実行後:

abc
abcd
abc

Hellod

予想出力:

Hello
abcd
Hello

Hello d

私は何を見逃していますか?


注:空白文字を保持したいと思います。

ベストアンサー1

もし必要なのはスペースを予約することです。

注:空白文字を保持したいと思います。

その後、一致しますが、交換時に復元します。

 orig='abc([[:space:]]+)'
 new='Hello\1'
 sed -E -e "s|${orig}|${new}|g" ./infile ;

これにより、次の出力が生成されます(修正するには適切な-iオプションを追加してください)。

 Hello  
 abcd  
 Hello   

 Hello d

もちろん、これはファイルの一部の行の末尾にスペースがあると仮定します。

 $ cat infile | sed -n l
 abc  $
 abcd  $
 abc   $
 $
 abc d$

空白で終わらない行を一致させるために正規表現が必要な場合は、より複雑な正規表現が必要です。

 orig='abc([[:space:]]+|$)';
 new='Hello\1';
 sed -E -e "s,${orig},${new},g" ./infile ;

もちろん、正規表現で必要な置換との競合を避けるs|||ために区切り文字を変更する必要があります。s,,,|

おすすめ記事