замена `` `char с помощью awk - PullRequest
18 голосов
/ 29 июня 2011

У меня есть строки с одним : и ' в них, от которых я хочу избавиться.Я хочу использовать awk для этого.Я пытался использовать:

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

и

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

и

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

, но ни одна из них не сработала, но возвращает ошибку Unmatched "..когда я ставлю

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

, тогда он работает и удаляет все символы : и _.Как мне избавиться от ' char?

Ответы [ 7 ]

11 голосов
/ 29 июня 2011

tr сделано для этой цели

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

$ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}'
teststring
9 голосов
/ 29 июня 2011

Это работает:

awk '{gsub( "[:'\'']","" ); print}'
7 голосов
/ 29 июня 2011

Вы можете использовать:

  1. Восьмеричный код для одинарной кавычки:

    [:\47]
    
  2. Одиночная кавычка внутри двойных кавычек, но вв этом случае специальные символы будут расширяться оболочкой:

    % print a\': | awk "sub(/[:']/, x)"        
    a
    
  3. Использовать динамическое регулярное выражение, но с этим подходом связаны показатели производительности:

    % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)'  
    a
    
6 голосов
/ 29 июня 2011

С bash вы не можете вставить одиночную кавычку в литерал, окруженный одинарными кавычками.Например, используйте '"'"'.

Сначала ' закрывает текущий литерал, затем "'" объединяет его с литералом, содержащим только одну кавычку, и ' открывает строковый литерал, который также будетобъединены.

То, что вы хотите:

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

Альтернатива ssapkota также хороша ('\'').

3 голосов
/ 20 мая 2012

Я не знаю, почему вы ограничиваете себя использованием awk, в любом случае у вас есть много ответов от других пользователей.Вы также можете использовать sed, чтобы избавиться от ": '"

sed 's/:\'//g'

Это также послужит вашей цели.Простой и менее сложный.

2 голосов
/ 02 августа 2013

Это также работает:

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

0 голосов
/ 02 июня 2017

самое простое awk '{gsub(/\047|:/,"")};1'

...