2016-09-09 108 views
1

我有一个非常大的制表符分隔的文件,我想用另一个替换此文件中的一行。由于该行具有> 100列,所以不需要简单的sed's/find/replace /'。我的新行存储在文件newline.txt在另一个文件中使用sed替换文件中的行

如何实现:

sed 's/find/newline.txt/' infile 
+0

更换为了澄清,我想'找到'该行的一个子部分,然后替换整行 – tc13

+0

'sed“s /^.* find。* $/$(cat newline.txt)/”'? – Aaron

+0

不知道我明白了,如果您在原始文件中找到某种模式,那么您希望整行被newline.txt中的对应行取代?这是否意味着该模式是独特的,只返回一行? – dood

回答

1

从@Aaron

sed "s/^.*find.*$/$(cat newline.txt)/" infile.txt 

哪里找到是infile.txt的唯一字符串返回单行线,该线然后通过newline.txt

3

随着GNU sed的:其中包含find文件file.csv

行查找,添加文件newline.txt的内容(r)并删除(d)其中包含的行find

sed -e '/find/{r newline.txt' -e 'd}' file.csv 
0

试试这个

sed s/find/$(< newline.txt)/ infile 
+1

你不能在没有引号的's'命令中有空格。 –

0

基于GNU sed的4.2.2,还包括来自Cyrus答案和Aaron

$ cat foo.txt 
1 abc 
2 ijk! 
3 pqr 
4 xyz 

$ cat f1.txt 
a/b/c 

$ cat f2.txt 
line 

$ cat f3.txt 
line a 
line b 


1)模式,而不是包含字符替代品,会影响sed命令或行为奇怪由于bash替代内部双引号

$ sed "/3/c $(< f2.txt)" foo.txt 
1 abc 
2 ijk! 
line 
4 xyz 

$ sed "s/.*3.*/$(< f2.txt)/" foo.txt 
1 abc 
2 ijk! 
line 
4 xyz 

$ sed -e '/3/{r f2.txt' -e 'd}' foo.txt 
1 abc 
2 ijk! 
line 
4 xyz 


2)图案越来越受影响由于bash取代

$ sed "/!/c $(< f2.txt)" foo.txt 
bash: !/c: event not found 

$ sed '/!/c '"$(< f2.txt)" foo.txt 
1 abc 
line 
3 pqr 
4 xyz 

$ sed "s/.*!.*/$(< f2.txt)/" foo.txt 
bash: !.*/$: event not found 

$ sed 's/.*!.*/'"$(< f2.txt)/" foo.txt 
1 abc 
line 
3 pqr 
4 xyz 

$ sed -e '/!/{r f2.txt' -e 'd}' foo.txt 
1 abc 
line 
3 pqr 
4 xyz 
影响 sed

$ sed "/3/c $(< f1.txt)" foo.txt 
1 abc 
2 ijk! 
a/b/c 
4 xyz 

$ sed "s/.*3.*/$(< f1.txt)/" foo.txt 
sed: -e expression #1, char 11: unknown option to `s' 

$ sed "s|.*3.*|$(< f1.txt)|" foo.txt 
1 abc 
2 ijk! 
a/b/c 
4 xyz 

$ sed -e '/3/{r f1.txt' -e 'd}' foo.txt 
1 abc 
2 ijk! 
a/b/c 
4 xyz 


4)代用多行


3)更换线(单只含线)字符

$ sed "/3/c $(< f3.txt)" foo.txt 
sed: -e expression #1, char 14: extra characters after command 

$ sed "s/.*3.*/$(< f3.txt)/" foo.txt 
sed: -e expression #1, char 14: unterminated `s' command 

$ sed -e '/3/{r f3.txt' -e 'd}' foo.txt 
1 abc 
2 ijk! 
line a 
line b 
4 xyz 
相关问题