[英]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,还包括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
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.