如何使用“ sed”自动更改配置文件?

时间:2019-01-23 17:19:01

标签: regex awk sed

我正在尝试创建一个脚本,该脚本在.groovy配置文件中动态查找行号,然后利用'head / tail'命令将多个代码行插入.groovy'配置文件中。我无法将行号硬编码到脚本中,因为供应商将来可能会更改行号的配置和顺序。有人对实现此目标的最佳方法有建议吗?

EX。)

1:这是第一行

2:这是第二行

问题:我需要插入:

test {
   test{
     authenticationProvider     =/random/path
   }
}

我无法对sed中的谎言编号进行硬编码,因为它们将来可能会更改。如何动态让sed找到合适的行号并以正确的格式插入多行代码?

2 个答案:

答案 0 :(得分:1)

这应该做

$ line_num=2; seq 5 | sed "${line_num}r insert"

1
2
test {
   test{
     authenticationProvider     =/random/path
   }
}
3
4
5

要插入的文本放置在名为insert的文件中。由于没有示例输入文件,因此我生成了5的序列作为输入源。

答案 1 :(得分:0)

假设您可以找到行号,则可以使用bash脚本轻松完成此操作:

文件insert-lines.sh

#!/bin/bash

MYLINE=$1
FILE=$2
head -$MYLINE < $FILE
cat <<__END__
test {
  test{
    authenticationProvider     =/random/path
  }
}
__END__
tail +$((MYLINE+1)) $FILE

然后您可以运行以下命令:

chmod 755 insert-lines.sh
./insert-lines.sh 3 .groovy > .groovy.new
mv .groovy.new .groovy

,脚本将在.groovy文件的第3行和第4行之间插入该块。

请注意,我假设最近的Linux发行版支持tail +n语法,该语法从行 n 开始输出文件的末尾。如果您的tail版本不支持,则必须替换该部分代码。