他のファイルを作成せずにファイルを修正する [複製]

他のファイルを作成せずにファイルを修正する [複製]

sedなしで他のファイルにコンテンツを書き込むことなくファイルを変更する方法はありますかawk

たとえば、

$ cat test.txt
aaa
aaa
bbb
ccc
ddd

usingをオプションsedに置き換えると、次の結果が得られます。-ised -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というバックアップが作成されます。

関連情報