簡體   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