Как избежать апострофов в заявлении awk?

Попробуйте следующее:

в типе терминала: w

, а затем после имени пользователя выведите такой вывод: pts / 2

now type :

fuser -k /dev/pts/2

Это должно ударить пользователя, теперь попробуйте удалить его

1
задан 26 September 2017 в 11:06

2 ответа

Будет выглядеть сумасшедшим, но вот вы:

awk -F',' '{print "SELECT * from user where id = '"'"'" $2 "'"'"'" ";"}' myfile.csv

SELECT * from user where id = 'cf915247dfcf47b6814b5350e5cbdfd8';

Надеюсь, это поможет!

1
ответ дан 23 May 2018 в 02:08

Вы можете просто использовать \47 (или \047) в своей строке, что awk означает '.

awk -F, '{print "SELECT * from user where id = \47" $2 "\47;"}' myfile.csv

Это своего рода неэлегантный («Что повторяется magic value '47' do ?! "), но синтаксис чист, и этот метод для создания одной цитаты довольно хорошо известен.

awk - это то, что особенно относится к \47, а не к вашей оболочке. В ' ' -котированных строках ракеты типа Bourne, такие как магическое значение Bash . C Оболочки, подобные tcsh, но не расширяются \47, и это все еще работает.

Вместо \47 вы можете использовать \047. Они оба работают, если только \47 не следует сразу восьмеричной цифрой (0-7), и в этом случае вы должны использовать \047, чтобы избежать указания неправильного символа. Обратите внимание, что, в отличие от некоторых языков, 47 в \47 является восьмеричным, даже без ведущего 0; см. ниже.

Что означает \47? Почему это использует \47, когда просто использует \47 , использует 0x27?

Это потому, что два шестнадцати составляют четыре восьмерки.

\47 - восьмеричная последовательность символов, поэтому это 4 × 8 + 7 × 1 = 39. 0x27 - шестнадцатеричный числовой литерал, поэтому это 2 × 16 + 7 × 1 = 39. Затем спецификатор printf %c форматирует его как символ.

Проверка с помощью python -c 'print int("47", 8), int("27", 16)' дает 39 39, как и ожидалось.

0
ответ дан 23 May 2018 в 02:08

Другие вопросы по тегам:

Похожие вопросы: