1. ホーム
  2. bash

[解決済み] Bashコマンドからテキストファイルの内部を検索・置換する

2022-03-15 11:26:41

質問

与えられた入力文字列に対して検索と置換を行う最も簡単な方法は何ですか? abc で置き換え、別の文字列、例えば XYZ ファイル内の /tmp/file.txt ?

私はアプリを書いていて、IronPythonを使ってSSH経由でコマンドを実行しています - しかし、私はUnixをそれほどよく知らないので、何を探せばいいのかわかりません。

Bashは、コマンドラインインターフェイスであると同時に、非常に強力なスクリプト言語であると聞いています。もしそれが本当なら、このようなアクションを実行することができるのでしょうね。

bashでできるのか、また、目的を達成するための最もシンプルな(1行の)スクリプトは何ですか?

どのように解決するのですか?

最も簡単な方法は、sed(またはperl)を使用することです。

sed -i -e 's/abc/XYZ/g' /tmp/file.txt

のため、インプレース編集を行うためにsedを起動します。 -i オプションで指定します。 これは、bashから呼び出すことができます。

どうしてもbashだけで済ませたい場合は、以下のようにするとうまくいくでしょう。

while IFS='' read -r a; do
    echo "${a//abc/XYZ}"
done < /tmp/file.txt > /tmp/file.txt.t
mv /tmp/file.txt{.t,}

これは各行をループして置換を行い、一時ファイルに書き出すものです (入力を破壊したくないので)。 最後のmoveはtemporaryを元の名前に移動させるだけです。(堅牢性とセキュリティの観点から、一時ファイル名は静的であったり予測可能であってはなりませんが、ここでは割愛します)。

Macユーザーの方へ。

sed -i '' 's/abc/XYZ/g' /tmp/file.txt (理由は下のコメント参照)