我正在尝试创建一个脚本,该脚本在.groovy配置文件中动态查找行号,然后利用'head / tail'命令将多个代码行插入.groovy'配置文件中。我无法将行号硬编码到脚本中,因为供应商将来可能会更改行号的配置和顺序。有人对实现此目标的最佳方法有建议吗?
EX。)
1:这是第一行
2:这是第二行
问题:我需要插入:
test {
test{
authenticationProvider =/random/path
}
}
我无法对sed中的谎言编号进行硬编码,因为它们将来可能会更改。如何动态让sed找到合适的行号并以正确的格式插入多行代码?
答案 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
版本不支持,则必须替换该部分代码。