2013-05-10 3 views

ответ

5

Вы абсолютно НЕ МОЖЕТЕ использовать одну цитату внутри сценария с одной кавычкой, поскольку эта цитата абсолютно обозначает конец этого скрипта [сегмент].Варианты у вас есть следующие:

  1. Поместите сценарий в файле «Foo», как {print "'"$0} и выполнить как: awk -f foo file или
  2. Используйте последовательность побег \047 везде вы хотите напечатать цитату: awk '{print "\047"$0}' file или
  3. Сохранить котировка в переменной: awk -v q=\' '{print q$0}' file или
  4. Разделяйте сценарий AWK с двойной вместо одинарных кавычек и избежать ничего оболочка может заботиться о: AWK «{печать \» '\ „\ $ 0}“ файл
  5. Опустить awk a й обратно к раковине только, чтобы получить цитату: awk '{print "'\''"$0}' file

Конечный пункт списка выше, фактически 2 отдельных сегментов AWK сценария ('{print "' и '"$0}') с небольшим количеством оболочки в середине (\'), так что, когда конец результат заключается в конкатенации, которые передаются оболочкой команде awk для выполнения, вы получаете то, что хотите.

FWIW Я бы использовал «1», если ваш скрипт содержит более двух строк, «2» или «3», в противном случае «3» является моим личным предпочтением, но YMMV. Я бы не сделал 4 или 5.

1

Правильный способ сделать это будет:

$ awk -v c="'" '{print c$0}' file 
1

может быть таким образом?

awk 'sub(/^/,"\x27")' 

, если Вам нравится print:

awk '{print "\x27"$0}' 
2

Одним из решений является просто использовать код ASCII для ':

$ awk '{print "\047"$0}' file 
+1

+1 для умного подхода –

5

Или используйте sed:

sed -e "s/^/\'/" file 
+0

+1 так как мы должны это делать. –

4

Для того, чтобы иметь '' внутри -delimited строки в Баш немного сложнее:

Вы должны прекратить ' -string, то должны поставить ' в цитируемом пути, а затем повторно запустить ' -string :

echo 'ab'\''cd' 

напечатает

ab'cd 

и, применяя эти знания в вашей команде, вам нужно

awk '{print "'\''"$0}' file 

Тот же принцип: Вы хотите

{print "'"$0} 

и должны разделить на '. Таким образом, вы получаете 2-х частей: {print " и "$0}, которые должны быть заключены в ' и "присоединился" с \':

'{print "'\''"$0}' 
0

Попробуйте это:

awk '$0="'\''"$0'<<XXX 
one 
two 

three 
XXX 

Выход:

'one 
'two 
' 
'three 

Символ ' должен быть экранирован для вызывающей оболочки, поскольку он обрабатывается им не awk. Поэтому сначала он должен быть закрыт (2 '), затем экранирован в оболочке (\'), затем снова открыт (4 ').

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