Заменяя `` `char, используя awk
У меня есть строки с одним :
и a '
в них, от которых я хочу избавиться. Я хочу использовать awk
для этого. Я пробовал использовать:
awk '{gsub ( "[:\\']","" ) ; print $0 }'
и
awk '{gsub ( "[:\']","" ) ; print $0 }'
и
awk '{gsub ( "[:']","" ) ; print $0 }'
не работает, но вернет ошибку Unmatched ".
. когда я положил
awk '{gsub ( "[:_]","" ) ; print $0 }'
Затем он работает и удаляет все символы :
и _
. Как я могу избавиться от '
char?
Ответы
Ответ 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'