我的文件很少,在很多地方都包含JOY_DOL_XXX
之类的字符串。我希望用另一个带双引号的字符串替换为"JOY.DOL.XXX"
,但这里XXX
可以是任何字符串,例如MAN
,CAT
,DOG
所以在这种情况下我想编写一个脚本,相应地替换它而不明确指定它。
例如:
JOY_DOL_MAN ==> "JOY.DOL.MAN"
JOY_DOL_CAT ==> "JOY.DOL.CAT"
你能帮帮我,我该怎么做。
答案 0 :(得分:2)
Sed似乎最简单:
sed 's|JOY_DOL_\(...\)|"JOY.DOL.\1"|g' file
输入:
JOY_DOL_MAN
JOY_DOL_CAT
输出:
"JOY.DOL.MAN"
"JOY.DOL.CAT"
\(...\)
匹配三个字符。替换为\1
。g
将允许为每个输入模式替换多个匹配。答案 1 :(得分:0)
此awk
可能有用。
awk '{gsub(/_/,".");print "\""$0"\""}' file
awk -F_ '{$1=$1;print "\""$0"\""}' OFS=. file
支持更复杂的请求。
echo ABC JOY_DOL_CAT XYZ | awk '{for (i=1;i<=NF;i++) {if (gsub(/_/,".",$i)) printf "\"%s\" ",$i; else printf "%s ",$i}print ""}'
ABC "JOY.DOL.CAT" XYZ