我有一个包含以下文本的文件:
chr9 116186254 116186404 chr9:116163625-116163775,1 2936 .
chrM 5 155 chrM:16377-16527,1 253 .
我要执行的操作是使用制表符删除非字母数字(即: , -
)字符。
我尝试过:
cat test.txt | sed 's/[:-\,\-]/ /g'
但是它给了我
chr9 116186254 116186404 chr9 116163625 116163775 1 2936 .
chr 5 155 chr 16377 16527 1 253 .
请注意,chrM
已完全更改为chr
。正确的方法是什么?
所需的输出是
chr9 116186254 116186404 chr9 116163625 116163775 1 2936 .
chrM 5 155 chrM 16377 16527 1 253 .
答案 0 :(得分:2)
您可能希望使用来用制表符替换所有标点符号
sed 's/[[:punct:]]/\t/g' test.txt > test.out.txt
或者,任何带有单个标签的标点符号块:
sed -E 's/[[:punct:]]+/\t/g' test.txt > test.out.txt
sed 's/[[:punct:]][[:punct:]]*/\t/g' test.txt > test.out.txt
请参见online sed
demo。
在后两个示例中,-E
使POSIX ERE语法可以使用未转义的+
作为与1个或多个出现的量化子模式匹配的量词。 BRE POSIX变体需要[[:punct:]][[:punct:]]*
,其中[[:punct:]]*
匹配0个或多个标点符号。请注意,在GNU sed
中,此BRE POSIX模式可以写为[[:punct:]]\+
(其中\+
与POSIX ERE模式中的+
相同,是一个量词)。 / p>