使用 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.txt
和B.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
这对我不起作用...抱怨 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 的某个部分?的主要内容,如果未能解决你的问题,请参考以下文章