我想在两行特定行之后将文本行插入另一个文本文件中。
在类似
之后插入some text...
example text
(
);
some text...
我有一个文本文件(包含两行文字),我希望在括号之间插入。
如果我尝试插入的文本文件包含类似于以下内容的文本
need this;
in between the parentheses;
然后我希望结果看起来像这样
some text...
example text
(
need this;
in between the parentheses;
);
some text...
什么样的最佳解决方案都可以起作用(不必进行测试)。
编辑澄清
在需要插入文本的部分之前还有其他开括号,例如
sometext...
sometext (sometext)....
sometext
(
);
exampletext
(
);
sometext...
所以,我认为" exampletext"需要参考然后查找括号。此外,它可能需要搜索" exampletext"正是因为文档中还有其他行带有" exampletextsometext ..."
完成此操作后,需要将文件添加到原始文件中。
答案 0 :(得分:5)
如果打开的(
单独就行了,你就可以
sed -e '/^(/r fileToInsert' firstFile
因为/^(/
找到了要插入的行(“以开括号开头的行”),r
表示“读取文件内容并在此处插入。” p>
如果确定插入点所需的表达式必须更复杂,请在注释中详细说明。例如,“完全是一个开括号而不是其他”将是/^($/
编辑感谢您澄清要求。如果您需要在example text
后跟(
后插入此文本,则以下脚本应该可以正常工作。将其放在自己的文件中,并使其可执行(chmod 755 myScript
),然后使用./myScript
运行。
#!/bin/bash
sed '
/exampletext/ {
N
/(/ r multi2.txt
}' multi1.txt
说明:
/exampletext/ { find a match of this text, then…
N go to the next line
/(/ match open parenthesis
r multi2.txt insert file 'multi2.txt' here
}' end of script
multi1.txt name of input file
请注意,这会产生stdout
的输出。您可以将其指向新文件名 - 例如
./myScript > newFile.txt
我使用以下输入文件(multi1.txt
)测试了这个:
some text...
sometext...
sometext (sometext)....
exampletext
not the right string
(
);
sometext
(
);
exampletext
(
);
sometext...
它给出了输出
some text...
sometext...
sometext (sometext)....
exampletext
not the right string
(
);
sometext
(
);
exampletext
(
insert this
and that
);
sometext...
我认为你想要的是什么?文本被插入example text
后跟一个左括号的位置 - 但是当它们之间还有另一条直线时...
答案 1 :(得分:2)
以下是使用awk
:
awk '/^\(/{print $0; while((getline line <"filetoInsert") > 0) print line; next}1' firstFile
<强>解释强>
/^\(/
来表示查看以左括号开头的行。 getline
函数来读取第二个文件。 next
来避免默认打印原始文件行(我们的paren),因为我们使用您看到的1
启用了默认打印在末尾。 答案 2 :(得分:1)
这可能适合你(GNU sed):
sed -e '$!N;/^(\n);$/{r insert_file' -e '};P;D' first_file
答案 3 :(得分:0)
也在python中:
import sys
with open(sys.argv[2]) as secondFile:
insertStrList=secondFile.readlines()
firstStrList=[]
with open(sys.argv[1]) as firstFile:
while True:
i_str=firstFile.readline()
if not i_str:
break
firstStrList.append(i_str)
if i_str == '(\n':
firstStrList+=insertStrList
print ''.join(firstStrList)
将其与python mergeParenthesis.py a.txt b.txt
但我同意Floris的答案更容易;)
欢呼声