修改文件而不创建另一个文件

修改文件而不创建另一个文件

有没有一种方法可以修改文件而不将内容写入另一个文件,而不需要sedawk

例如:

$ 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没有and该怎么做sed

答案1

您可以使用vi脚本:

$ vi test.txt -c '%s/aaa/NNN/ | wq'
$ cat test.txt
NNN
NNN
bbb
ccc
ddd

您只需自动化在命令模式下使用时通常输入的内容vi(通常使用Esc:):

%- 在每一行执行以下命令:

s/aaa/NNN/- 替换aaaNNN

|- 命令分隔符

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

perl -pi -e 's/aaa/bbb/g' file.txt

这将给出您想要的输出。

i.bak您还可以使用而不是自动备份原始文件i。这将创建一个名为 file.txt.bak 的备份。

相关内容