Search code examples
linuxbashawksubstringgsub

Replace Double quote with double double quote with awk


I am writing a script with awk to replace all double quote with double double quote for all files in folder.

I found this in stackoverflow but i get other result

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

the output for this example example :

01##"hello world"98##

is

01##""""hello world""""98##

And I would like to get

01##""hello world""98##

Solution

  • To replace all double quotes with two double quotes, use sed:

    sed 's/"/""/g' file
    

    No need for anything fancier than that.

    To do this on all files in a directory, use the in-place option if your version of sed supports it:

    sed -i.bak 's/"/""/g' *
    

    This creates backups of each file with the suffix .bak.

    If you can't use -i, then use a loop with a temporary file:

    for i in *; do 
        sed 's/"/""/g' "$i" > tmp && mv tmp "$i"
    done
    

    Or there's always good old ed:

    for i in *; do
        ed -s "$i" <<< $',s/"/""/g\nw'
    done