使用 sed 或其他命令行工具将 B.txt 的内容添加到 A.txt 的某个部分?

Posted

技术标签:

【中文标题】使用 sed 或其他命令行工具将 B.txt 的内容添加到 A.txt 的某个部分?【英文标题】:Add contents of B.txt to some part in A.txt using sed or other command line tools? 【发布时间】:2014-02-09 00:39:29 【问题描述】:

我正在尝试按照标题所述进行操作:将 B.txt 中的所有文本添加到 A.txt 中的某个特定位置/部分。 我尝试使用 cat 和 sed 来完成此任务,但我对这些工具还是新手,不知道是否可以仅使用这些工具来实现我的目标。

这是我有一个更直观的命令行想法:

cat A.txt | sed "s/some_part_in_A/some_part_in_A+contents_of_B.txt/" > C.txt

或者没有猫...

sed "s/some_part_in_A/some_part_in_A+contents_of_B.txt/" A.txt > C.txt

或者完全不同的东西......

连接 A 和 B 以获得 C.txt,然后以某种方式将 C 的 B 部分(位于底部)“移动”到 A 的某个部分(C 的)。希望这听起来不会太令人困惑,哈哈

我错过了什么?我需要使用一些额外的工具吗?变量呢?以某种方式将 B.txt 的内容弹出到一个变量中,然后在 sed 中使用该变量? 对不起,我有点像菜鸟,我只是想用一些常识来解决这个问题。一些指导会有所帮助。提前致谢!

编辑: 解决方案

仅匹配 ONE LINE,然后从文件中插入文本:

sed '/some_part_in_A/rB.txt' A.txt > C.txt

感谢测试版!

匹配两行(或更多),然后从文件中插入文本:

sed "/line_one/N;/line_one\n.line_two/rB.txt" A.txt > C.txt

注意,您首先声明 line_one 然后 N 然后 line_one 再接着 \n (和一个 . 或 wutever 是捕获 \n 和 line_two 之间的任何内容所必需的,在我的情况下是一个 TAB 字符)然后 line_two 最后 r 到“ read" 从而将 B.txt 的内容插入 A.txt,但将结果输出到 C.txt

【问题讨论】:

你能给我们举一个A.txtB.txt的例子吗? 它实际上是个人的,但我不明白它有什么关系?它可以是任何东西。我在这里寻找关于如何将 txt 从一个文件“插入”到另一个文件的技术。我对正则表达式部分没有问题。我已经设置了我的正则表达式模式来定位 A.txt 中我想要放置 B 的内容的位置,所以这不是问题。问题在于将 B 插入 A。仅此而已。 :) 我不知道您是否要将 B 中的行插入到 A 中,或者这是否可能涉及 行内 的更改。正则表达式/some_part_in_A/ 到底是什么样的?你在寻找一个特定的行,一个行中的一个词,一个以某事或其他开头的行,什么?即使是虚构的例子也会有所帮助。 当然,/some_part_in_A/ 是 A.txt 中大约一半的行。实际上是这样的:<div>Apple</div> 我需要在<div>Apple</div> 之后从 B.txt 添加一些 50-100 行(或更多) 【参考方案1】:
sed '/some_part_in_A/rB.txt' A.txt > C.txt

【讨论】:

如果我想匹配 A.txt 中的两行并在这两行之后添加 B.txt 怎么办?我在 sed 这样做时遇到了一些麻烦。 IE。 sed "/<div>Apple<\/div>\n<li>/rB.txt" A.txt > C.txt 好像不懂\n ?? @StefanDjurcic:我知道的唯一方法是使用跨越两行的命令:sed '/line_one/N;/line_two/rB.txt<CR>' A.txt > C.txt 这对我不起作用...抱怨 ,这甚至可以吗?谷歌搜索什么也没给我。顺便说一句,我正在使用来自 [gnuwin32.sourceforge.net/packages/sed.htm] 的 Windows 的 GNU sed,我想如果这对 sed 来说不是那么容易的话,什么命令适用于 awk.exe 或 perl? 正如我所说,该命令跨越两行,这在评论中并不容易显示。 “”表示“回车”,请勿逐字输入。 nvm 我让它工作了!但我使用了其他/类似的东西。由于我在 windows 上使用 sed for windows,它不喜欢单引号,有时也不喜欢 ,这很奇怪。无论如何,这个公式对我使用 sed for windows 4.2.1 sed "/line_one/N;/line_one\n.line_two/rB.txt" A.txt > C.txt 有效我的情况是 TAB char),然后是 line_two,最后是 r “读取”,因此将 B.txt 的内容插入 A.txt,但将结果输出到 C.txt

以上是关于使用 sed 或其他命令行工具将 B.txt 的内容添加到 A.txt 的某个部分?的主要内容,如果未能解决你的问题,请参考以下文章

sed工具使用2

如何使用 vim 命令或 sed/awk 命令将具有不同列数的行分隔到另一个文件中? [关闭]

Linux下的强大工具之一sed(转),Shell必备

linux中sed工具的使用

Linux之sed详解

sed 插入行命令 OSX