使用sed删除行中的模式

时间:2014-10-30 11:13:40

标签: regex bash sed

我有一个list.txt文件,其中包含文件路径列表:

/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删除我想要的部分?

2 个答案:

答案 0 :(得分:1)

相反,您可以使用以下语法:

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

这会查找$OLDPATH并将其删除,而您的|d会删除包含所提供模式的行。

根据您给定的输入数据,它返回:

/path/directory
/path/mydirectory

答案 1 :(得分:0)

如果您的所有行都以OLDPATH开头,则可以使用

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

或更好:

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