[英]How to use sed to remove endings on strings in text file?
我有以下文本文件,它是一长串字符串:
$ cat file1.txt
tags
rs:23269:DFDAB:18/1
rs:10760:DFDAB:160/1
rs:97759:DFDAB:0/2
rs:17278:DFDAB:013/1
rs:7323:DFDAB:548/2
rs:1236:DFDAB:4336/1
rs:1256:DFDAB:2373/1
这些字符串需要删除结尾的/1
或/2
。 我认为sed
将是最好的选择(或者也许是另一个对正则表达式友好的工具,例如perl)
我认为sed 's/[0-9]+$//' file1.txt
将删除每个字符串末尾的所有整数,但是如何删除/#
?
是否有其他的选择,更高效, sed
?
需要将斜杠反斜杠,而不是表示替换分隔符:
sed 's/\/[0-9]$//'
您可以使用其他定界符来避免反斜杠:
sed 's=/[0-9]$=='
对于Perl,替换是完全相同的,您只需要-p
标志来打印输出,以及-e
来引入代码进行评估:
perl -pe 's=/[0-9]$=='
您没有在行的最后显示要删除#的示例Input_file,所以我编辑了显示的Input_file位。 假设以下是Input_file。
cat Input_file
tags
rs:23269:DFDAB:18/21
rs:10760:DFDAB:160/1
rs:97759:DFDAB:0/2
rs:17278:DFDAB:013/1
rs:7323:DFDAB:548/2
rs:1236:DFDAB:4336/1
rs:1256:DFDAB:2373/1
rs:1236:DFDAB:4336/#
rs:1256:DFDAB:2373/#
然后跟随sed可能也有助于最后删除数字和最后删除#。
sed 's/\/[0-9]*$//;s/\/#$//' Input_file
tags
rs:23269:DFDAB:18
rs:10760:DFDAB:160
rs:97759:DFDAB:0
rs:17278:DFDAB:013
rs:7323:DFDAB:548
rs:1236:DFDAB:4336
rs:1256:DFDAB:2373
rs:1236:DFDAB:4336
rs:1256:DFDAB:2373
如果您的Input_file中没有#,请仅使用以下内容。
sed 's/\/[0-9]*$//' Input_file
一根以下的衬垫将为您提供所需的输出
perl -pi -e "s/\/[0-9]+$|\/#+$//g" file1.txt
输出:
rs:23269:DFDAB:18
rs:10760:DFDAB:160
rs:97759:DFDAB:0
rs:17278:DFDAB:013
rs:7323:DFDAB:548
rs:1236:DFDAB:4336
rs:1256:DFDAB:2373
哪里:
\/[0-9]+$ : anything ending with '/' followed by [any number between 0-9]
(or)
#+$ : one or more '#'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.