0

bash を使用して 1 つまたは複数のファイルをその場で処理するにはどうすればよいですか?

つまり、 file から読み取り、x何らかの処理 (検索置換など) を実行し、 file に書き込みますx

私はsedあなたができることを知っています: sed -i "" "s/original/replacement/g"、しかし時々 sed はそれをカットせず、-の-i ""ようなオプションがない別のツールが必要です。

私は最近、次のことができることを自分で発見しました。

( BUFFER="`cat FILENAME`"; echo "$BUFFER" > FILENAME )

環境変数を使用してファイルの内容を保存します。非常に大きなファイルの場合、これはおそらく効率的ではなく、環境変数の容量が制限される可能性があります。

別の方法はありますか?

この回答も読みましたが、bash ソリューションを探しています。何らかの形でタスクに完全に適合するオープンソース ツールも歓迎されます。

4

2 に答える 2

2

awk、perl、ruby、python などの多くのスクリプト ツールがありますが、bash に大きなファイルがある場合は、最初に出力を一時ファイルに保存することをお勧めします。次に、それを保存します。

while IFS= read -r LINE; do
    case "$LINE" in
    something_to_exclude|another_to_exclude)
        ;;
    yet_another_to_exclude)
        ;;
    *)
        # This is fine to include.
        echo "$LINE"
        ;;
    eac
done < "$FILENAME" > "$FILENAME".temp

cat "$FILENAME".temp > "$FILENAME"
rm "$FILENAME".temp
于 2013-08-29T15:27:01.507 に答える