有没有一种方法可以修改文件而不将内容写入另一个文件,而不需要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
没有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/
- 替换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
perl -pi -e 's/aaa/bbb/g' file.txt
这将给出您想要的输出。
i.bak
您还可以使用而不是自动备份原始文件i
。这将创建一个名为 file.txt.bak 的备份。