繁体   English   中英

在文件中使用sed替换行与另一个文件

[英]Using sed replace line in file with another file

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

我如何实现:

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

使用GNU sed:

查找文件中的行file.csv其中包含find ,追加内容( r文件) newline.txt和删除( d )线包含find

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

来自@Aaron

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

如果find是infile.txt中返回单行的唯一字符串,则该行将替换为newline.txt

基于GNU sed 4.2.2,还包括CyrusAaron的答案

$ 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


3)包含影响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)用多条线替换

$ 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

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM