繁体   English   中英

如何使用sed删除文本文件中字符串的结尾?

[英]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 '#'   

如何删除`

[英]How to remove `<a href="file://a>`keep this text`</a>` using sed or perl?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM