2017-01-04 4 views
0

Это то, что я до сих пор пытался, попробовал несколько способов, но не могу понять, как это правильно. Моя цель состоит в том, чтобы дезинфицировать вход для предотвращения проблем при вводе в MySQL из текстового файлаКак избежать одиночной кавычки с использованием awk в сценарии bash

cat 'file.txt' | awk '{gsub(/'"'"'/, '.') ; print $0}' > 'file_sanitized.txt' 
+2

Дубликат http://stackoverflow.com/questions/2332917/awk-to-replace-single-quote – Iceman

+0

Как примечание стороны, как правило, следует предпочесть 'AWK

0

Вы использовали неправильно процитировать:

awk '{gsub(/'"'"'/, "."); print}' 
+0

Вы не можете сделать это, когда ваш скрипт находится в файле, который вызывается с помощью 'awk -f script', поэтому, если вы начинаете с одного лайнера, вызванного из командной строки, и в конечном итоге хотите сохранить его в файле, который вы должны запомнить измените место, где вы это делали. Лично я просто использую '\ 047'. –

0

Поскольку вы просили «как избежать одинарные кавычки, используя AWK» вот решение с использованием AWK:

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

где \x27 является представление последовательности побег шестнадцатеричное значение 27 (одиночная цитата).

Список всех управляющих последовательностей см https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html

+0

Нет, НЕ используйте шестнадцатеричное значение '\ x27', вместо этого используйте восьмеричный' \ 047'. См. Http://stackoverflow.com/a/41474373/1745001. –

1

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

awk '{gsub(/\047/,".")}1' file 

См http://awk.freeshell.org/PrintASingleQuote.

+0

Если OP хочет заменить один символ другим, 'tr' - это то, что он хочет. – hek2mgl

+0

Заданный вопрос: «Как избежать одиночной кавычки, используя awk в bash-скрипте», а не «Как заменить один символ другим в скрипте оболочки». Да, в приведенном минимальном примере используется эта функциональность в контексте изменения '' '' '. '', Но это более широкий вопрос. –

Смежные вопросы