[英]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.