パターン: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,,,
|