awk或sed:在匹配后

时间:2016-05-02 14:56:03

标签: bash awk sed

我正在寻找一种sed或awk解决方案,它会在模式的第一次匹配后将字符串插入文件中的现有行。例如,我需要这个:

command arg arg2 -o another string and another string and so on

看起来像这样:

command "new string here" arg arg2 another string and another string and so on

如果我们匹配“命令”,它只需要匹配第一次出现的“命令”。

我不想使用整行sed替代解决方案,因为实际行很长。 (并且我需要修改多行。)我遇到了无数的解决方案,使用sed或awk在文件中追加新行或将字符串附加到行的结尾或开头但尚未找到解决方案插入到我需要在这里做的线的中间。

2 个答案:

答案 0 :(得分:2)

你可以用awk实现它:

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "new string here" " " s }'

答案 1 :(得分:1)

sed版本:

sed -n 's/^\(command\)\(.*\)/\1 "new string here"\2/p'
  • s - 替换
  • ^ - 行首
  • () - 捕获组1
  • 命令 - 文字字符串
  • () - 捕获组2
  • 。* - 行上的其他一切
  • \ 1 - 捕获组1的内容
  • &#34;这里有新字符串&#34; - 文字字符串
  • \ 2 - 捕获组2
  • p - 打印