Подтвердить что ты не робот

Заменяя `` `char, используя awk

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

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

и

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

и

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

не работает, но вернет ошибку Unmatched ".. когда я положил

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

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

4b9b3361

Ответ 1

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

  • Октальный код для одиночной кавычки:

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

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

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

Ответ 2

tr для этой цели

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

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

Ответ 3

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

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

Ответ 4

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

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

Что вы хотите:

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

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

Ответ 5

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

sed 's/:\'//g'

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

Ответ 6

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

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

Ответ 7

Простейшая  awk '{gsub(/\047|:/,"")};1'