2010-04-19 94 views
3

我有两个文本文件,我想将文本放置在另一个中间,我做了一些研究,发现有关添加单一字符串的信息:合并两个文本文件在特定位置,awk或者sed

我在所谓的STUFFGOESHERE第二个文本文件的注释,所以我尝试:

sed '/^STUFFGOESHERE/a file1.txt' file2.txt 

的sed:1: “/^STUFFGOESHERE/A long.txt”:指挥预计\后跟文本

所以我尝试了一些不同的东西,试图根据给定的行放置文本的内容,但没有lu CK。

任何想法?

回答

5

这应做到:

sed '/STUFFGOESHERE/ r file1.txt' file2.txt 

如果你想删除STUFFGOESHERE行:

sed -e '/STUFFGOESHERE/ r file1.txt' -e '/STUFFGOESHERE/d' file2.txt 

如果要修改文件2到位:

sed -i -e... 

(或也许sed -i '' -e...,我正在使用GNU sed 4.1.5。)

2

如果你可以使用前或编辑,尝试

cat <<EOF | ex -e - file2.txt 
/^STUFFGOESHERE/ 
.r file1.txt 
w 
q 
EOF 

相同的脚本适用于ED:

cat <<EOF | ed file2.txt 
/^STUFFGOESHERE/ 
.r file1.txt 
w 
q 
EOF 
1
awk '/STUFFGOESHERE/{while((getline line<"file1")>0){ print line};next}1' file2 
1

Unix外壳(bash中,CSH,zsh的,等等):

: | perl -e '@c = join("", map {<>} 0..eof); print $c[0] =~ /STUFFGOESHERE/ ? $` . $c[1] . $'"'"' : $c[0]' file2.txt file1.txt > newfile2.txt 
+0

出于某种原因,我不明白为什么该文本文件是放在其他文件后,并没有经过STUFFGOESHERE – S1syphus 2010-04-19 15:05:04

+0

你的句子格式不正确,但我会猜测你的意思。主要原因是我编写的所有脚本都是从标准输入或从命名为参数的文件中输入它们的输入。我从不将它们硬编码到脚本中。这是一个基本的脚本卫生问题。另一个原因是Perl没有一个接受文件名并返回文件内容的函数,就像PHP那样。 – reinierpost 2010-04-20 15:28:12