用其他字符串替换多个给定的字符串

时间:2019-12-20 10:32:16

标签: linux unix awk sed

我有一个像这样的文本文件:

Stone, John
Priya, Ponnappa
Wong, Natalie
Stanbrige, Natalie
Lee-Walsh, Natalie
Li, Natalie
Ithya, Ruveni
French, Tamzyn
Simoes, Salome
Virtue, Jackie
Campbell-Gillies,Jackie
Anderson, John
Kazantzis, John
Blair, Ruveni
Meldrum, Jackie
Smith, Maureen 
Burch, Ruveni
Harry, Verona
Andrews, Ruveni
Ellawala, Ruveni

我可以使用sed来做到这一点,但是我发现它并不漂亮:

  sed 's/Ruveni/Ahmed/g' | sed 's/Verona/Sandro/g' | sed 's/Natalie/Chloé/g' | sed 's/John/Holly/g' | sed 's/Jackie/Melissa/g'

这将通过替换名称来完成工作,是否有更干净的方法使用sed或使用awk更好?

非常感谢您

1 个答案:

答案 0 :(得分:0)

如果您想使用键值对方法,则可以尝试遵循。

awk '
BEGIN{
  FS=OFS=", "
  array["Ruveni"]="Ahmed"
  array["Verona"]="Sandro"
  array["Natalie"]="Chlo"
  array["John"]="Holly"
  array["Jackie"]="Melissa"
}
{
  for(i=1;i<=NF;i++){
    $i=$i in array?array[$i]:$i
  }
}
1
' Input_file

或者为什么不像下面这样简单地组合用sed分隔的所有;替代项:

sed '
s/Ruveni/Ahmed/g;
s/Verona/Sandro/g;
s/Natalie/Chlo/g;
s/John/Holly/g;
s/Jackie/Melissa/g;
' Input_file