単純なテキストファイルがあります。
>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
です。a
ar
a
あなたはそれをしたいですか?
sed -i -r 's/pattern/replacement' a
または(不明)
sed -ri 's/pattern/replacement' a