用awk替换双引号和双引号
问题描述:
我正在用awk编写脚本来替换所有双引号对于文件夹中所有文件的双引号。用awk替换双引号和双引号
我看到这个计算器,但我得到其他结果
awk 'BEGIN{FS=OFS="#"} {for (i=0;i<=NF;i++) gsub(/"/, "&&",$i)} 1 $f3 > $f2
输出这个例子比如:
01##"hello world"98##
是
01##""""hello world""""98##
而且我想获得
01##""hello world""98##
答
要更换有两个双引号的所有双引号,使用SED:
sed 's/"/""/g' file
没有必要比这更有趣。
要做到这一点对目录中的所有文件,请使用就地选择,如果您的sed的版本支持:
sed -i.bak 's/"/""/g' *
这与后缀.bak
创建每个文件的备份。
如果您不能使用-i
,然后使用循环使用临时文件:
for i in *; do
sed 's/"/""/g' "$i" > tmp && mv tmp "$i"
done
或者总是有好老ed
:
for i in *; do
ed -s "$i" <<< $',s/"/""/g\nw'
done
答
环路更改为
awk 'BEGIN{FS=OFS="#"} {for (i=1;i<=NF;i++) gsub(/"/, "&&",$i)} 1' $f3 > $f2
当环路以0开始时,它首先与""
替换"
为$0
(在此上下文中整行),然后再次对每个字段。
但实际上,你可以只是使它紧凑:
awk '{gsub(/"/,"\"\"");}1' $f3 > $f2
或者
sed 's/"/""/g' $f3 > $f2
+0
@EdMorton: Right ... In OP的代码,它从0开始。因此,它被两次替代,正如我所提到的那样... – anishsane
答
就失去了环路等:
$ echo '01##"hello world"98##' | awk '{gsub(/"/,"&&")}1'
01##""hello world""98##
阅读Arnold Ro编写的Effective Awk Programming第4版bbins。
你的输入文件是怎么样的? '$ f3'内容? – Inian
嗨,谢谢你的回复 01 ##“hello world”98 ## –
如果你用'sed'' sed's /“/ &&/g'inputfile'好 –