заменить строку специальным "" " - PullRequest
1 голос
/ 30 мая 2019

Я хочу найти и заменить строку специальным символом "'", используя gsub из awk.

Я попытался экранировать символ с помощью \ и даже \\, но мой код возвращает>.

awk '{ gsub("%27","'",$1); print $1 }' file.txt

file.txt:

%27SWAY%27

Я хочу, чтобы выше былозаменено на «SWAY»

Ответы [ 4 ]

4 голосов
/ 30 мая 2019

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

Одним из способов решения этой проблемы является присвоение символа кавычки переменной awk с помощью -v:

echo '%27SWAY%27'| awk -v q="'" '{ gsub("%27",q,$1); print $1 }' 
'SWAY'

Другое - использование escape-последовательности восьмеричного символа \047:

$ echo '%27SWAY%27'| awk '{ gsub("%27","\047",$1); print $1 }' 
'SWAY'

Наконец, вы можете поместить программу awk в отдельный файл, и в этом случае одиночная кавычка не вызывает проблем:

$ cat a.awk
{ gsub("%27","'",$1); print $1 }

$ echo '%27SWAY%27'| awk -f a.awk
'SWAY'
2 голосов
/ 30 мая 2019

Не могли бы вы попробовать тоже.

awk '{gsub("%27","\047")} 1'  Input_file

Ооо, я только что увидел, что у @jas уже есть это, позвольте мне добавить решение sed.

sed 's/%27/'"'"'/g'  Input_file

Или, согласно комментарию @ghoti sir, можно использовать в sed как:

sed "s/%27/'/g" input_file
1 голос
/ 30 мая 2019

Это может сработать для вас (GNU sed):

sed 's/%27/'\''/g' file

Сделайте отверстие в основной оболочке и используйте одинарные кавычки в кавычках.

1 голос
/ 30 мая 2019

Вы можете использовать расширение строки BASH, если ваш BASH является последним:

$ echo "%27SWAY%27" | awk $'{gsub("%27","\'",$1); print $1 }' 
'SWAY'

«$» перед «{..}» интерпретирует «\» для awk.

...