web-dev-qa-db-ja.com

awkを使用して `'`文字を置き換える

削除したい単一の:とa'の行があります。これにはawkを使用します。私は使用してみました:

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

そして

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

そして

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

それらのどれも動作しませんでしたが、エラーUnmatched ".を返します。私が入れたとき

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

動作し、すべての:および_文字を削除します。 '文字を削除するにはどうすればよいですか?

18
SIMEL

次を使用できます。

  1. 単一引用符の8進コード:

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

    % print a\': | awk "sub(/[:']/, x)"        
    a
    
  3. 動的正規表現を使用しますが、このアプローチに関連するパフォーマンスへの影響があります。

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

trはこの目的のために作成されます

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

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

これは動作します:

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

Bashでは、単一引用符で囲まれたリテラル内に単一引用符を挿入できません。使用する '"'"' 例えば。

最初 'は現在のリテラルを閉じてから、"'"は、単一引用符のみを含むリテラルと連結し、'は、文字列リテラルを再度開きます。これも連結されます。

あなたが欲しいのは:

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

ssapkotaの代替手段も優れています('\'')。

6
Benoit

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

sed 's/:\'//g'

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

3
Venkat Madhav

これも機能します:

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

2
Andy Barbour

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

0
Henry Barber