sed从文件中删除url就地

时间:2016-02-12 14:57:32

标签: sed

我正在尝试使用sed从文件中就地删除特定网址,目前下面的命令会运行,但网址仍在文件中。谢谢:))

列表

xxxx://www.xxx.com/xxx/xx/xxx/file.html
xxxx://www.xxx.com/xxx/xx/xxx/file1.bam
xxxx://www.xxx.com/xxx/xx/xxx/file2.bam
xxxx://www.xxx.com/xxx/xx/xxx/file1.vcf.gz
xxxx://www.xxx.com/xxx/xx/xxx/file2.vcf.gz

所需的输出

file.html
file1.bam
file2.bam
file1.vcf.gz
file2.vcf.gz

sed命令

sed -i -e 's|xxxx://www.xxx.com/xxx/xx/xxx/.*/||' /home/cmccabe/list  

2 个答案:

答案 0 :(得分:1)

您的sed脚本中列出了额外的目录。看看事情是如何排列的:

             xxxx://www.xxx.com/xxx/xx/xxx/file.html
                                           ↓
sed -i -e 's|xxxx://www.xxx.com/xxx/xx/xxx/.*/||' /home/cmccabe/list  

您的替换似乎要求该文件存在于xxxx://www.xxx.com/xxx/xx/xxx/下的目录中,而不是在该目录本身内。删除额外的目录要求,或使其成为可选项,并且您的sed替换按原样运行。

您正在寻找的内容可能是:

sed -i -e 's|xxxx://www\.xxx\.com/xxx/xx/xxx/||'  /home/cmccabe/list

sed -i -r -e 's|xxxx://www\.xxx\.com/xxx/xx/xxx/(.+/)?||'  /home/cmccabe/list

或仅允许一个级别的子目录:

sed -i -r -e 's|xxxx://www\.xxx\.com/xxx/xx/xxx/([^/]+/)?||'  /home/cmccabe/list

答案 1 :(得分:0)

应该是:

sed 's|.*/||' /home/cmccabe/list

.*/将匹配字符串开头的贪婪,直到最后一次出现/并将其替换为空。

顺便说一句,在xargs的帮助下,你也可以使用basename命令:

xargs -a /home/cmccabe/list -n1 basename