sed
なしで他のファイルにコンテンツを書き込むことなくファイルを変更する方法はありますかawk
?
たとえば、
$ cat test.txt
aaa
aaa
bbb
ccc
ddd
usingをオプションsed
に置き換えると、次の結果が得られます。-i
sed -i 's/aaa/NNN/g' test.txt
NNN
NNN
bbb
ccc
ddd
awk
なしで何をすべきですかsed
?
答え1
次のスクリプトを使用できますvi
。
$ vi test.txt -c '%s/aaa/NNN/ | wq'
$ cat test.txt
NNN
NNN
bbb
ccc
ddd
コマンドモードで使用するときに通常入力する内容を自動化するだけですvi
(通常は使用Esc:)。
%
- 各行で次のコマンドを実行します。
s/aaa/NNN/
- 次aaa
へ交換NNN
|
- コマンド区切り記号
w
- ファイルへの変更の書き込み
q
- 辞職する
答え2
使用スポンジ:
#!/bin/bash
pattern='aaa'
replacement='NNN'
while read -r line
do
printf '%s\n' "${line//$pattern/$replacement}"
done < "${1}"
呼ぶ:
./script.sh test.txt | sponge test.txt
答え3
そしてed
、ラインエディタ:
ed -s test.txt <<< $',s/pattern/replace/g\nw\nq'
または
ed -s test.txt <<IN
,s/pattern/replace/g
w
q
IN
または
printf '%s\n' ,s/pattern/replace/g w q | ed -s test.txt
答え4
パールを使用することもできます
perl -pi -e 's/aaa/bbb/g' file.txt
これにより、希望の出力が提供されます。
i.bak
自動バックアップの代わりに元のファイルを使用することもできますi
。これにより、file.txt.bakというバックアップが作成されます。