Bourne Shell:如何将一些文本行插入文件的给定行号

发布于 2024-08-30 02:17:27 字数 173 浏览 5 评论 0原文

我正在编写一个 Bourne Shell 脚本来自动编辑源文件。

我得到了我需要的行号,如下所示:

line=`sed -n '/#error/=' test.h`
line=$[$line - 2]

现在我想在此行号之后插入几行文本,我该怎么做?

I'm writing a Bourne Shell script to automatically edit a source file.

I get the line number I need like this:

line=`sed -n '/#error/=' test.h`
line=$[$line - 2]

Now I want to insert a few lines of text after this line number, how can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

爱冒险 2024-09-06 02:17:27

如果您安装了简单的unix编辑器ed,您可以这样说:

echo "$line i
$lines
.
w
q
" | ed filename.txt

这是没有“视觉”模式的vi。 $line 必须是行号,$lines 必须是要插入到文件中的文本。

If you have the simple unix editor ed installed, you can say something like this:

echo "$line i
$lines
.
w
q
" | ed filename.txt

This is vi without the "visual" mode. $line must be the line number and $lines the text to insert into the file.

对不⑦ 2024-09-06 02:17:27
totallines=`cat test.h | wc -l`
head -n $line test.h >$.h
echo "some text" >>$.h
tail -n $((totallines-line)) test.h >>$.h
mv $.h head.h


(已更正)

totallines=`cat test.h | wc -l`
head -n $line test.h >$.h
echo "some text" >>$.h
tail -n $((totallines-line)) test.h >>$.h
mv $.h head.h

?
(corrected)

有深☉意 2024-09-06 02:17:27
line=$(sed -n '/#error/=' test.h)
line=$(($line - 2))
sed -i "$line s/$/\ntext-to-insert/" test.h

或者

sed -i "$line r filename" test.h
line=$(sed -n '/#error/=' test.h)
line=$(($line - 2))
sed -i "$line s/$/\ntext-to-insert/" test.h

or

sed -i "$line r filename" test.h
风向决定发型 2024-09-06 02:17:27

你可以只使用 awk

awk '/#error/{for(i=1;i<=NR-2;i++){print _[i]}print "new\n"_[NR-1];f=1 }!f{_[NR]=$0 }f' file > t && mv t file

you can just use awk

awk '/#error/{for(i=1;i<=NR-2;i++){print _[i]}print "new\n"_[NR-1];f=1 }!f{_[NR]=$0 }f' file > t && mv t file
分開簡單 2024-09-06 02:17:27

看来你工作太辛苦了。为什么不直接插入文本而不是查找行号?例如:

$ sed '/#error/a\
> this text is inserted
> ' test.h

如果您要插入的文本在文件中,则更容易:

$ sed '/#error/r filename' test.h

It looks like you're working too hard. Why not just insert the text instead of finding the line number? eg:

$ sed '/#error/a\
> this text is inserted
> ' test.h

If the text you want to insert is in a file, it's even easier:

$ sed '/#error/r filename' test.h
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文