2016-09-04 13 views
0

ありがとうございます。二重引用符を二重引用符に置き換えてください

2つの二重引用符を1つの二重引用符に置き換えようとしています。

例えば、私は以下のデータを持っている:

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

をそして、私はそれになりたい:

1,2,3,4,"abc" 

ここでは、私が使用していますawkコマンドですが、それが動作していません。

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

ありがとうございました! sed

+0

使用しているawkコマンドが持っています連続した二重引用符を連結することとはまったく関係ありません。それを読んで、二重引用符ではない正規表現と置換テキストの両方の文字に注意してください。 –

答えて

1

、ちょうど最後の"を削除します。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の質問には、2つの二重引用符の後ろにスペースがあります。1,2,3,4、 "abc" "。それがうまくいかない理由かもしれません。 awkをawkサブ(/ \ "\"/"、" \ "") ''に変更して、2つの二重引用符を単一のものに置き換えることができます。 –

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

こんにちは!私は2つの二重引用符を削除しましたが、それを1つに置き換えていませんでした。結局、これは私が持っているものです:1,2,3,4、 "abc –

+2

作業。 – bgoldst

+0

@ Dr.Bakeはできません。 –

0

をあなたが冒険好きなら、あなたは以下のような何かを試みることができる:SEDと"によってすべて""を置き換えるために210。これは、テキストの前後に引用符のバランスをとる:

$ 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[^"])任意の回数を探して探して、二重引用符を探し1回以上を意味し、 (*)。周囲の()は、後で一致したこのパターンを再利用することを意味します。
  • 代替部分では、前のステップで()に保存した部分と二重引用符を開始する二重引用符を置きます。
+0

こんにちは!どうもありがとうございました。しかし、あなたの答えをさらに説明してください。 –

+0

@ Dr.Bake:説明が追加されました。 – sjsam

0

これを試してみてください:

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

+は、私はちょうどそれが連続して出現箇所の任意の数で動作を示すためにあなたの例の大きな混乱を作っている与えられた文字

の1以上出現を意味し、この場合、与えられた文字のうち"

オリジナルファイル

$ 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" 

それは何?最後の引用符が削除されます。おそらく、より良い方法は、このようにそれを置くことです:。その後、我々は何をエスケープwhith気にする必要はありません

awkのサブ(/ 『$ /、』 ") '

+0

あなたの答えは確かに少し説明する価値があります。コメントは検索可能なコンテンツの作成に役立ちます。 –

関連する問題