我是shell腳本的初學者。 我有一個變量包含值=字符。 我想在=字符後的字段中添加引號。添加引號的字段分離
abc="source=TDG"
echo $abc|awk -F"=" '{print $2}'
我的代碼只打印一個字段。 我的預期輸出是
source='TDG'
請幫我。
我是shell腳本的初學者。 我有一個變量包含值=字符。 我想在=字符後的字段中添加引號。添加引號的字段分離
abc="source=TDG"
echo $abc|awk -F"=" '{print $2}'
我的代碼只打印一個字段。 我的預期輸出是
source='TDG'
請幫我。
$ 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"
打印,隨後輸入字段分隔符,接着用單引號然後第二場和另一個單引號$ echo "${abc%=*}='${abc#*=}'"
source='TDG'
${abc%=*}
將刪除後的=
和零個或多個字符最後一次出現${abc#*=}
將刪除零個或多個字符和字符串的開頭第一=
桑達將是更好的選擇:
echo "$abc" | sed "s/[^=]*$/'&'/"
awk可以做到但需要額外的位:
echo "$abc" | awk -F= 'gsub(/(^|$)/,"\047",$2)' OFS==
What is taking place?
使用sub通過八進制nr用單引號括起TDG以避免引用問題。
echo "$abc" | awk '{sub(/TDG/,"\047TDG\047")}1'
source='TDG'
雖然這段代碼可能回答這個問題,但提供關於爲什麼和/或它如何回答問題的附加上下文會顯着提高其長期價值。請[編輯]你的答案,添加一些解釋。 – CodeMouse92
交換你在sed這樣就可以避免那些醜陋的十六進制代碼使用引號:'「‘’」' – Harvey
@Harvey,同時它會在這種情況下工作,需要使用雙引號,因爲它要小心會在被傳遞給sed之前由shell解釋 – Sundeep