我正在尝试使用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
答案 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