GNU Awk 4.1.0 (2013 年リリース) 以降では、「インプレース」ファイル編集のオプションがあります:
<ブロック引用>
[...] 新しい機能を使用して構築された「インプレース」拡張機能は、GNU "sed -i
をシミュレートするために使用できます。 "機能。[...]
使用例:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
バックアップを保持するには:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
GNU awk 4.1.0 以降を使用していない限り...
sed の -i
のようなオプションはありません オプションなので、代わりに次のようにします:
$ awk '{print $0}' file > tmp && mv tmp file
注:-i
魔法ではなく、一時ファイル sed
も作成しています
GNU awk 4.1.0 以降...
GNU awk
バージョン 4.1.0 (2013 年 10 月 5 日リリース) でこの機能を追加 . -i
を指定するほど簡単ではありません リリース ノートに記載されているオプション:
新しい -i オプション (xgawk から) は、awk ライブラリ ファイルをロードするために使用されます。これは、最初の非オプション引数がスクリプトとして扱われるという点で -f とは異なります。
バンドルされている inplace.awk
を使用する必要があります 次のように拡張機能を適切に呼び出すためのインクルード ファイル:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
変数 INPLACE_SUFFIX
バックアップ ファイルの拡張子を指定するために使用できます:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
この機能が追加されたことをうれしく思いますが、言語の簡潔さと -i inplace
のおかげでパワーが得られるため、実装はそれほど厄介ではありません。 8 文字は長すぎます i.m.o .
マニュアルへのリンクはこちら 公式の言葉のために。
ちょっとした裏技
echo "$(awk '{awk code}' file)" > file