2011-06-29 8 views
15

私は取り除きたいものの中に:'という単一の行があります。これにはawkを使用します。それらのawkを使用して `` `charを置き換える

awk '{gsub ("[:\\']","") ; print $0 }' 

awk '{gsub ("[:\']","") ; print $0 }' 

awk '{gsub ("[:']","") ; print $0 }' 

以外は働いていたが、エラーUnmatched ".を返す:私が使って試してみました。私は

awk '{gsub ("[:_]","") ; print $0 }' 

を入れたときに、それが動作し、すべての:_文字を削除します。 ' charを取り除くにはどうすればよいですか?

あなたが使用することができ

答えて

6

:単一引用符のため

  1. オクタルコード:

    [:\47] 
    
  2. 二重引用符内の単一引用符を、その場合には、特別な 文字はシェルによって展開されます:

    % print a\': | awk "sub(/[:']/, x)"   
    a 
    
  3. ダイナミック正規表現を使用して、しかし、このアプローチに 関連パフォーマンスに影響があります

    % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)' 
    a 
    
11

trは、この目的のために作られ

echo test\'\'\'\':::string | tr -d \': 
teststring 

$ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}' 
teststring 
8

これは動作します:あなたが挿入できないのbashで

awk '{gsub("[:'\'']",""); print}' 
6

を一重引用符で囲まれたリテラル内の一重引用符。たとえば、'"'"'を使用します。

最初の'は現在のリテラルを閉じ、次に"'"を1つの引用符だけを含むリテラルと連結し、'は連結した文字列リテラルを再度開きます。

何が欲しいのです:

awk '{gsub ("[:'"'"']","") ; print $0; }' 

ssapkotaの代替も良いです('\'')。

2

なぜあなたはawkを使用することに自分自身を制限しているのかわかりませんが、とにかく他のユーザーから多くの回答を得ています。また、sedを使用して「:」を取り除くこともできます。

sed 's/:\'//g' 

これはあなたの目的にも役立ちます。シンプルで複雑ではありません。

2

また、これは動作します:

awk '{gsub("\x27",""); print}'

0

最も簡単な awk '{gsub(/\047|:/,"")};1'

関連する問題