最近,我需要做这个工作:
第1步
例如,在file_A中查找匹配的字符串,要匹配的字符串是“ILikeeStackoverflow”。
file_A
...
ILikeStackoverflow
“ILikeStackoverflow”之后的行
.......
第2步
如果此字符串“ILikeeStackoverflow”已存在,则将另一个file_B(少于10行)复制到此file_A中,紧跟在该字符串之后。
因此,在执行此复制后,file_A应该看起来像这样:
file_A
...
ILikeStackoverflow
Line_1_of_file_B
Line_2_of_file_B
...
Line_n_of_file_B
“ILikeStackoverflow”之后的行
.......
我的代码是这样但无法正常工作(当前目录中的file_A和file_B)。
match_string="ILikeStackoverflow"
sed " /^$match_string/a"$file_B" " file_A
非常感谢您的建议!
编辑:
现在,我知道为什么我被卡住了,但无法弄清楚如何修复代码。如果您有任何想法,请继续发表评论,非常感谢!
问题是,只有当字符串占用一个单独的行时,sat的代码才有效。如果匹配的字符串只是长字符串的一部分,那么他的代码就无法工作。例如,如果fileA是这样的,那么代码就无法工作。
file_A
...
/测试/开始/ ILikeStackoverflow /测试/结束
“ILikeStackoverflow”之后的行
.......
实际上,在我的“index.html”中,要匹配的字符串是:“5000s-IntW300”,而包含我匹配字符串的行是:
/蓝色CCD的数据/ DAMIC_SNOLAB_RUN1 / 5000S-IntW300-OS
有任何修复建议吗?
再次感谢!
编辑2:
实际上,我希望将fileB复制到比匹配的字符串行多一行的位置。例如,真正的位置是:
file_A
...
/测试/开始/ ILikeStackoverflow /测试/结束
该行有重要信息,不应在此处复制fileB。
这是应该复制fileB的确切行。
.......
答案 0 :(得分:1)
您可以使用此sed
,
sed -i.bak '/matchString/r fileB' fileA
<强>测试强>
档案A
sample
text
Stackoverflow
some
text
文件B
Line 1
Line 2
....
Line 10
<强>输出:强>
sat:~# sed -i.bak '/^Stackoverflow/r FileB' FileA
sample
text
Stackoverflow
Line 1
Line 2
....
Line 10
some
text
答案 1 :(得分:0)
关键是在匹配后读取一行,并使用N
命令完成。然后使用r
插入另一个文件的全部内容。最初我试过了:
sed '/Stackoverflow/ { N; r fileB };' fileA
但是给了我以下错误:
sed: -e expression #1, char 0: unmatched `{'
所以我使用了带有sed
命令的文件,并使用-f
开关调用它。
script.sed
的内容:
/Stackoverflow/ {
N
r fileB
}
然后运行它:
sed -f script.sed fileA
根据sat的示例数据,它产生:
sample
text
Stackoverflow
some
Line 1
Line 2
....
Line 10
text