【发布时间】:2021-05-18 19:55:42
【问题描述】:
最好使用awk、sed或类似的,我如何实现append_last_line,例如。在函数主体的最后行附加一些内容,可以是给定文件中的任何位置?
# file.sh
foo ()
{
echo "bar"
}
$ append_last_line 'foo' 'echo "baz"' file.sh
# file.sh
foo ()
{
echo "bar"
echo "baz"
}
第n行呢?
# file.sh
foo ()
{
echo "bar"
echo "baz"
}
$ append_nth_line 1 'foo' 'echo "qux"' file.sh
# file.sh
foo ()
{
echo "baz"
echo "qux"
echo "bar"
}
【问题讨论】:
-
What about the n-th line是什么?功能?文件?别的东西?确保您的示例输入/输出满足您的所有要求。 -
@eheu 简单的解决方案(对于复杂的问题可能还不够,也就是说,您可能需要一个真正的 shell 解析器来识别函数的开始位置):打开输入文件,搜索
^function (),搜索 @ 987654330@,将除}之外的所有内容写到临时文件中,写下你的行,写},将所有内容复制到文件末尾到新文件,关闭输入文件,将临时文件重命名为新文件。跨度> -
@eheu 用于函数的第 n 行:搜索
^{,开始计算行数(并检查您在第 n 行之前没有到达^}),然后写下您的行和输入文件的其余部分。 -
@EdMorton 我已将我的问题编辑为更易于理解。
-
@rturrado 这可行!不过,我想知道是否有人可以想到使用一些 sed 或 awk 代码的解决方案。您是否考虑过 vi 来实施您的解决方案?