2014-10-30 38 views
0

我有一个包含文件路径列表的LIST.TXT文件删除模式:使用SED从线

/old/file/path/directory 
/old/file/path/mydirectory 

我努力做到以下几点:

/path/directory 
/path/mydirectory 

到做到这一点,我使用SED

OLDPATH=/old/file/ 


sed "\|$OLDPATH|d" list.txt > newlist.txt 

然而,这完全删除线。如何删除仅使用sed和变量$OLDPATH的零件?

回答

1

相反,你可以使用这个语法:

OLDPATH="/old/file" 
sed "s#$OLDPATH##" list.txt > newlist.txt 

这看起来为$OLDPATH,并删除它,而你的|d删除包含给定模式的行。

有了您给定的输入数据返回:

/path/directory 
/path/mydirectory 
+0

感谢@fedorqui那工作。 – SSF 2014-10-30 11:31:19

+0

只为我的信息,从现在开始,如果我想删除一行中的模式,我会更好使用'#PATTERN ##',这是正确的吗? – SSF 2014-10-30 11:33:30

+0

@ user2617731正好。有一般的替代模式是:'sed's/something/replacement /''。所以如果你把'replacement'留空,这个'something'就会被删除。 – fedorqui 2014-10-30 11:44:14

0

如果所有的线,OLDPATH开始,你可以使用

cut -c $(echo -n "$OLDPATH" | wc -c)- 

或更好:

cut -c "$((${#OLDPATH}+1))"-