sed -r は -i と互換性がありません。

sed -r は -i と互換性がありません。

単純なテキストファイルがあります。

>cat a
A=B

sedを使って次のように変更してみました。

setenv A B

私のsedコマンドは機能しません:

>sed -ir 's/([^\=]+)\=(.*)/setenv \1 \2/' a
sed: -e expression #1, char 30: invalid reference \2 on `s' command's RHS

ただし、-iオプションを削除すると、コマンドワードは同じです。

>sed -r 's/([^\=]+)\=(.*)/setenv \1 \2/' a
setenv A B

既定の正規表現を使用すると、この問題は発生しません。

>sed -ir 's/\([^=]*\)=\(.*\)/setenv \1 \2/' a
>cat a
setenv A B

私のsedバージョンは次のとおりです。

>sed --version
sed (GNU sed) 4.2.2

何が間違っているのかという提案がありますか?

ベストアンサー1

GNU Sedのオプションは、-i次の点で多少ユニークです。オプションでバックアップサフィックスを指定するパラメータの取得

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

したがって、「ファイルをその場で編集し、拡張正規表現構文を使用する」のではなく、「ファイルをその場で編集してバックアップファイルを作成する」という意味sed -ir 's/pattern/replacement' aです。aara

あなたはそれをしたいですか?

sed -i -r 's/pattern/replacement' a

または(不明)

sed -ri 's/pattern/replacement' a

おすすめ記事