abc
特定の入力文字列 (たとえば ) を検索して置換し、たとえばXYZ
ファイル 内の別の文字列に置き換える最も簡単な方法は何ですか/tmp/file.txt
?
私はアプリを書いていて、IronPython を使用して SSH 経由でコマンドを実行していますが、Unix についてはあまり詳しくなく、何に注意すればよいかわかりません。
Bash は、コマンドライン インターフェイスであるだけでなく、非常に強力なスクリプト言語でもあると聞いたことがあります。これが本当であれば、次のようなアクションを実行できると思います。
Bash でこれを行うことはできますか? また、目的を達成するための最も簡単な (1 行の) スクリプトは何ですか?
ベストアンサー1
最も簡単な方法はsed
(または Perl) を使用することです:
sed -i -e 's/abc/XYZ/g' /tmp/file.txt
sed
これは、オプションによりインプレース編集を実行するために呼び出されます-i
。のコマンド/g
のフラグは、グローバルに置換することを示します。つまり、各入力行の最初の出現のみを置換するわけではありません。これは Bash から呼び出すことができます。sed
s
(この-i
オプションは標準ではありません。MacOS を含む BSD ベースのプラットフォームでは、明示的なオプション引数が必要です-i ''
。)
本当に Bash だけを使いたいのであれば、次のようにすれば大丈夫です。
while IFS='' read -r a; do
echo "${a//abc/XYZ}"
done < /tmp/file.txt > /tmp/file.txt.t
mv /tmp/file.txt{.t,}
これは各行をループし、置換を行い、一時ファイルに書き込みます (入力を上書きしたくありません)。mv
最後の は、一時ファイルを元の名前に移動するだけです。(堅牢性とセキュリティのために、一時ファイル名は静的または予測可能なものにすべきではありませんが、ここでは触れません。)
これはBashのみを使用しますパラメータ拡張変数の値の置換を実行します。