2016-11-25 160 views
0

我正在用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## 
+0

你的輸入文件是怎麼樣的? '$ f3'內容? – Inian

+0

嗨,謝謝你的回覆 01 ##「hello world」98 ## –

+1

如果你用'sed'' sed's /「/ &&/g'inputfile'好 –

回答

5

要更換有兩個雙引號的所有雙引號,使用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 
0

環路更改爲

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

2

就失去了環路等:

$ echo '01##"hello world"98##' | awk '{gsub(/"/,"&&")}1' 
01##""hello world""98## 

閱讀Arnold Ro編寫的Effective Awk Programming第4版bbins。