在bash中的两个标记行之间插入文本

时间:2010-10-08 06:32:59

标签: bash scripting

我有一些行存储在名为bashrc_snippet的文本文件中。我想将它们插入.bashrc。由于我有时会更改文本文件的内容,因此我希望能够将它们重新插入.bashrc文件中。为此,我想使用标记线:

# User things
HISTSIZE=1000

#START
alias ls='ls --color=tty'
... some more lines
#END

我想要一个bash脚本来执行此操作(可能使用sed或awk)。算法应该是:

  • 如果缺少标记线,请在文件末尾(和文本行)添加它们
  • 如果标记行存在,请使用新的文本行
  • 替换它们之间的内容

2 个答案:

答案 0 :(得分:1)

不太了解你的要求,但这是一个猜测

#!/bin/bash

rcfile="$1"
snippet="$2"
var=$(<"$snippet")
if grep -q "START" "$rcfile" ;then
   awk -v v="$var" '/START/ {
     print $0
     print v
     f=1
   }f &&!/END/{next}/END/{f=0}!f' "$rcfile" >t && mv t "$rcfile"
else
   echo "#START" >> "$rcfile"
   echo "$var" >> "$rcfile"
   echo "#END" >> "$rcfile"
fi

使用:

$  ./test.sh rc_file bashrc_snippet

答案 1 :(得分:0)

我想建议这个(ex或vim命令):

ex -c '/^#START/+1,/^#END/-1 d' -c '/^#START/ r bashrc_snippet' -c 'wq'