使用sed在行匹配字符串的末尾插入文本

时间:2013-03-21 23:03:39

标签: bash sed

我在文本文件中有一行,其中包含分配给变量的项目列表...

ITEMS="$ITEM1 $ITEM2 $ITEM3"

我想编写一个bash脚本,使用sed查找匹配ITEMS的行,并将另一个项目附加到双引号内的列表末尾,这样就会产生......

ITEMS="$ITEM1 $ITEM2 $ITEM3 $ITEM4"

此外,我有一个要添加的项目的数量存储在变量中,假设它是$ number。所以我试图让它添加$ ITEM4 $ number并让它用我分配给该变量的任何东西替换$ number,让我们说它是这种情况下的数字4。我怎么能最好地完成这个?谢谢!

2 个答案:

答案 0 :(得分:4)

试试这个:

num=4
sed "/ITEMS=/s/\"$/ \$ITEM${num}\"/"

说明

  • 此处使用的sed表单为/re/s/before/after/,其中re为正则表达式(如grep),s///替换
  • \s是一个空格,*意味着更多的出现
  • &代表替换
  • 左侧匹配的字符串
  • ^作为正则表达式的第一个字符表示字符串/行的开头
  • $作为正则表达式的最后一个字符表示字符串/行的结尾

答案 1 :(得分:2)

$ cat file
ITEMS="$ITEM1 $ITEM2 $ITEM3"
$ number=4
$ sed "/ITEMS/s/\"$/ \$ITEM$number&/" file
ITEMS="$ITEM1 $ITEM2 $ITEM3 $ITEM4"