在特定行下添加信息

在特定行下添加信息

我想知道如何添加包含文件中特定行下信息的文件。

例如,我有file1.txt以下几行:

line 1
line 2
line 3

并 有我想在特定的位置file2.txt添加的信息。file1.txtline 2

这怎么办呢?

答案1

使用 Sed 的 R[ead] 命令

你可以使用 sedr 命令读入文件。例如,要按行号匹配行:

sed '2 r /tmp/file2.txt' /tmp/file1.txt

或者,如果您更喜欢按内容匹配该行:

sed '/^line 2/ r /tmp/file2.txt' /tmp/file1.txt

这是一个标准命令,不依赖于任何 GNU 扩展,因此它应该可以跨不同的 sed 实现工作。

上面的命令在其标准输出上打印结果。如果要修改原始文件,请-i在 sed 之后添加该选项(这适用于 Linux 和 Cygwin,但不适用于所有 UNIX 系统)。

答案2

此外,sed您还可以通过以下方式执行此操作awk

awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt

file2.txt这将插入每次line 2遇到的内容。

1是默认块{ print $0 }

这会将其输出发送到标准输出,如果您想覆盖,file1.txt请将输出保存到临时文件并覆盖:

awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt > file1.txt.tmp
mv file1.txt.tmp file1.txt

编辑

对于固定字符串匹配==会更可靠,例如要匹配提到的字符串,请使用以下条件:

awk '1; $0 == "\"zend_extension=/usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x/ZendOptimizer.so\"" { while(getline < "file2.txt") print }' file1.txt

请注意,这需要匹配整行。

相关内容