我想知道如何添加包含文件中特定行下信息的文件。
例如,我有file1.txt
以下几行:
line 1
line 2
line 3
并 有我想在特定的位置file2.txt
添加的信息。file1.txt
line 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
请注意,这需要匹配整行。