Pra*_*ama 10 scripting text-processing files
有没有办法修改文件而不将内容写入另一个文件,没有sed和awk?
例如:
$ cat test.txt
aaa
aaa
bbb
ccc
ddd
Run Code Online (Sandbox Code Playgroud)
替换 using sedwith-i选项,sed -i 's/aaa/NNN/g' test.txt将产生以下结果:
NNN
NNN
bbb
ccc
ddd
Run Code Online (Sandbox Code Playgroud)
如何在没有awk和的情况下做到这一点sed?
gar*_*Red 18
您可以使用vi脚本:
$ vi test.txt -c '%s/aaa/NNN/ | wq'
$ cat test.txt
NNN
NNN
bbb
ccc
ddd
Run Code Online (Sandbox Code Playgroud)
您只是自动执行vi在命令模式下使用时通常会输入的内容(Esc:通常使用访问):
% - 在每一行执行以下命令:
s/aaa/NNN/-aaa用NNN
| - 命令分隔符
w - 将更改写入文件
q - 退出
Seb*_*ian 14
使用海绵:
#!/bin/bash
pattern='aaa'
replacement='NNN'
while read -r line
do
printf '%s\n' "${line//$pattern/$replacement}"
done < "${1}"
Run Code Online (Sandbox Code Playgroud)
致电:
./script.sh test.txt | sponge test.txt
Run Code Online (Sandbox Code Playgroud)
don*_*sti 12
使用ed,行编辑器:
ed -s test.txt <<< $',s/pattern/replace/g\nw\nq'
Run Code Online (Sandbox Code Playgroud)
或者
ed -s test.txt <<IN
,s/pattern/replace/g
w
q
IN
Run Code Online (Sandbox Code Playgroud)
或者
printf '%s\n' ,s/pattern/replace/g w q | ed -s test.txt
Run Code Online (Sandbox Code Playgroud)
如果使用bash或ksh,则可以对 shell 变量使用模式替换。但是请注意,基本的 shell glob 功能较弱,而扩展的 shell glob 具有一些 sed 没有的功能,反之亦然。有关更多详细信息,请参阅中的“参数扩展” man 1 bash:
t=$(< test.txt); printf '%s\n' "${t//aaa/NNN}" >test.txt
Run Code Online (Sandbox Code Playgroud)
默认情况下禁用扩展的 shell glob,因此您可能需要显式启用它们:
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6724 次 |
| 最近记录: |