我很少有文件JOY_DOL_XXX
在很多地方都包含一个字符串。我想用另一个带双引号的字符串替换它"JOY.DOL.XXX"
,但这里XXX
可以是任何东西,例如,,MAN
所以在这种情况下,我想编写一个脚本,相应地替换它而不明确指定它。 CAT
DOG
例如:
JOY_DOL_MAN ==> "JOY.DOL.MAN"
JOY_DOL_CAT ==> "JOY.DOL.CAT"
你能帮我吗,我该怎么做。
Sed 似乎最简单:
sed 's|JOY_DOL_\(...\)|"JOY.DOL.\1"|g' file
输入:
JOY_DOL_MAN
JOY_DOL_CAT
输出:
"JOY.DOL.MAN"
"JOY.DOL.CAT"
\(...\)
匹配三个字符。在替换中表示为\1
。g
将允许为每个输入模式替换多个匹配项。这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