2016-09-04 115 views
0

謝謝大家的時間。用一個雙引號取代兩個雙引號

我想用一個雙引號替換兩個雙引號。

例如,我有如下數據:

1,2,3,4,"abc"" 

而且我希望它是:

1,2,3,4,"abc" 

這裏是我使用的awk命令,但它不工作:

cat sample.csv | awk '{ sub(/"\*""/, "\*", $5)}' 

非常感謝您的幫助!

+0

您正在使用的awk命令了。與合併連續的雙引號完全無關,只要閱讀它並注意正則表達式和替換文本中不是雙引號的字符即可。阿諾德羅賓斯 –

回答

1

sed隨着,只是刪除最後":使用sub()awk

sed 's/"$//' sample.csv 

類似的邏輯:

awk 'sub("\"$", "")' sample.csv 

實施例:

% sed 's/"$//' <<<'1,2,3,4,"abc""' 
1,2,3,4,"abc" 

% awk 'sub("\"$", "")' <<<'1,2,3,4,"abc""' 
1,2,3,4,"abc" 
+0

你好,謝謝你的例子,但它沒有與我一起工作:) –

+0

在OP的問題有兩個雙引號'1,2,3,4,「abc」 「'。這可能是爲什麼它不起作用。 awk可以改爲'awk'sub(/ \「\」/,「\」「)''來替換兩個雙引號。 –

3

使用sed替換所有""通過"

sed 's/""/"/g' file 
+0

hi!非常感謝您的回答。我刪除了兩個雙引號,但它並沒有用一個替換,所以最後,我得到了:1,2,3,4,「abc –

+2

我無法想象爲什麼這樣做不會工作。 – bgoldst

+0

@ Dr.Bake這是不可能的。 –

0

如果你喜歡冒險,你可以嘗試像下面。這種平衡中的文本報價:

$ cat 39316179 
1,2,3,4,"abc"" 
1,2,""4",3,"""abc""" # Notice irregular quoting. 
1,2,4,"3"",""""abc"""" 

$ sed -E 's/"+([^"]*)"+/"\1"/g' 39316179 
1,2,3,4,"abc" 
1,2,"4",3,"abc" 
1,2,4,"3","abc" 

說明

  • "+手段查找雙引號一次或多次
  • ([^"]*)手段尋找找not double quotes[^"])任意次數(*)。周圍的()意味着我們希望重新使用此後匹配的模式。
  • 在替代部分,我們把前兩個單引號,我們存儲在()中的部分放在前一步和結尾雙引號中。
+0

嗨!感謝您的幫助,但您能否進一步解釋您的答案? –

+0

@ Dr.Bake:解釋已添加 – sjsam

0

試試這個:

sed 's/"\+/"/g' 

+意味着超過1個occurence給定的人物

我已經做你的榜樣的更大的混亂只是爲了顯示它適用於任何數量的連續出現次數的的給定的字符,在這種情況下"

原始文件:

$ cat d.txt 
1,2,3,4,"abc"" 
"1"",""2""","""3"","4",""abc"" 
""""1"","""2"",""""3"","""4"","abc"" 
"""1"""",""2"","""3""",""""4"""",""""abc""""" 

結果:

$ cat d.txt | sed 's/"\+/"/g' 
1,2,3,4,"abc" 
"1","2","3","4","abc" 
"1","2","3","4","abc" 
"1","2","3","4","abc" 
+0

'\ +'是POSIX BRE的非標準擴展,可移植替代爲'\ {1,\}'。 – kdhp

0
echo '1,2,3,4,"abc""' | awk '{sub(/c""/,"c\"")}1' 

1,2,3,4,"abc" 

它能做什麼?它刪除了最後一個引號。也許一個更好的辦法是把它像這樣:

的awk「子(/‘$ /,’「),」然後,我們不必理會蒙山逃避什麼

+0

你的答案當然值得一點解釋。評論有助於創建可搜索的內容。 –