在Shell中如何将字符串从一种形式替换为另一种形式

时间:2013-09-22 07:46:20

标签: shell awk

我的文件很少,在很多地方都包含JOY_DOL_XXX之类的字符串。我希望用另一个带双引号的字符串替换为"JOY.DOL.XXX",但这里XXX可以是任何字符串,例如MANCATDOG所以在这种情况下我想编写一个脚本,相应地替换它而不明确指定它。

例如:

  JOY_DOL_MAN ==> "JOY.DOL.MAN"
  JOY_DOL_CAT ==> "JOY.DOL.CAT"

你能帮帮我,我该怎么做。

2 个答案:

答案 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