2017-02-16 3 views
1

Я новичок в скрипте оболочки. У меня есть одна переменная, содержащая значение, имеющее = символ. Я хочу добавить цитату в полях после = Символ.Полевое разделение с добавлением котировок

abc="source=TDG" 
echo $abc|awk -F"=" '{print $2}' 

Мой код печатает только одно поле. мой ожидается выход

source='TDG' 

Пожалуйста, помогите мне.

ответ

3
$ abc='source=TDG' 
$ echo "$abc" | sed 's/[^=]*$/\x27&\x27/' 
source='TDG' 
  • [^=]*$ матч не являющиеся = символов в конце строки
  • \x27&\x27 добавить одиночные кавычки вокруг согласованного текста


С awk

$ echo "$abc" | awk -F= '{print $1 FS "\047" $2 "\047"}' 
source='TDG' 
  • -F= поля ввода сепаратор =
  • print $1 FS "\047" $2 "\047" печать первое поле, за которым следует поле ввода сепаратор, а затем одиночные кавычки, то второе поле и еще одиночные кавычки
  • См how to escape single quote in awk inside printf для более способов обработки одиночных кавычек в печати


С bash parameter expansion

$ echo "${abc%=*}='${abc#*=}'" 
source='TDG' 
  • ${abc%=*} удалит последнее вхождение = и ноль или более символов после него
  • ${abc#*=} удалит ноль или более символов и первый = от начала строки
+0

переставить использование цитат в СЭД, так что вы можете избежать этих уродливых шестнадцатеричные коды: '«„“»' – Harvey

+1

@Harvey в то время как он будет работать в этом случае, нужно быть осторожным, используя двойные кавычки, как это будет интерпретироваться оболочкой перед тем, как перейти к sed – Sundeep

3

Sed будет лучшим выбором:

echo "$abc" | sed "s/[^=]*$/'&'/" 

Awk может это сделать, но нуждается в дополнительных битов:

echo "$abc" | awk -F= 'gsub(/(^|$)/,"\047",$2)' OFS== 
0
What is taking place? 

Использование sub для объемного TDG с одинарными кавычками по восьмеричному номеру, чтобы избежать проблем с цитированием.

echo "$abc" | awk '{sub(/TDG/,"\047TDG\047")}1' 
source='TDG' 
+1

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и/или как он отвечает на вопрос, значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение. – CodeMouse92