我有一个非常大的制表符分隔的文件,我想用另一个替换此文件中的一行。由于该行具有> 100列,所以不需要简单的sed's/find/replace /'。我的新行存储在文件newline.txt在另一个文件中使用sed替换文件中的行
如何实现:
sed 's/find/newline.txt/' infile
我有一个非常大的制表符分隔的文件,我想用另一个替换此文件中的一行。由于该行具有> 100列,所以不需要简单的sed's/find/replace /'。我的新行存储在文件newline.txt在另一个文件中使用sed替换文件中的行
如何实现:
sed 's/find/newline.txt/' infile
从@Aaron
sed "s/^.*find.*$/$(cat newline.txt)/" infile.txt
哪里找到是infile.txt的唯一字符串返回单行线,该线然后通过newline.txt
随着GNU sed的:其中包含find
文件file.csv
行查找,添加文件newline.txt
的内容(r
)并删除(d
)其中包含的行find
:
sed -e '/find/{r newline.txt' -e 'd}' file.csv
试试这个
sed s/find/$(< newline.txt)/ infile
你不能在没有引号的's'命令中有空格。 –
基于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
更换为了澄清,我想'找到'该行的一个子部分,然后替换整行 – tc13
'sed“s /^.* find。* $/$(cat newline.txt)/”'? – Aaron
不知道我明白了,如果您在原始文件中找到某种模式,那么您希望整行被newline.txt中的对应行取代?这是否意味着该模式是独特的,只返回一行? – dood