用awk替换双引号双引号

Hou*_*riz 0 linux bash awk substring gsub

我正在用awk编写一个脚本,用文件夹中所有文件的双重双引号替换所有双引号.

我在stackoverflow中发现了这个,但我得到了其他结果

awk 'BEGIN{FS=OFS="#"} {for (i=0;i<=NF;i++) gsub(/"/, "&&",$i)} 1 $f3 > $f2
Run Code Online (Sandbox Code Playgroud)

此示例示例的输出:

01##"hello world"98##
Run Code Online (Sandbox Code Playgroud)

01##""""hello world""""98##
Run Code Online (Sandbox Code Playgroud)

我想得到

01##""hello world""98##
Run Code Online (Sandbox Code Playgroud)

Tom*_*ech 5

要用两个双引号替换所有双引号,请使用sed:

sed 's/"/""/g' file
Run Code Online (Sandbox Code Playgroud)

不需要比这更漂亮的东西.

要对目录中的所有文件执行此操作,如果您的sed版本支持,请使用就地选项:

sed -i.bak 's/"/""/g' *
Run Code Online (Sandbox Code Playgroud)

这将使用后缀创建每个文件的备份.bak.

如果你不能使用-i,那么使用带有临时文件的循环:

for i in *; do 
    sed 's/"/""/g' "$i" > tmp && mv tmp "$i"
done
Run Code Online (Sandbox Code Playgroud)

或者总是好老ed:

for i in *; do
    ed -s "$i" <<< $',s/"/""/g\nw'
done
Run Code Online (Sandbox Code Playgroud)