2014-10-30 44 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))"-