【发布时间】:2020-02-03 02:43:16
【问题描述】:
我有以下文件
cat file.txt
ID Location
MNS1 NC_000004.12:g.d.a144120555T>C;NC_001423.23:c.a144120513G<C
MNS2 NC_000142.12:g.a144120552C,N>D
MNS3 NC_000142.12:g.a144120559C>N
我想用这种方式替换输入:
ID Location
MNS1 NC_000004.12:144120555;NC_001423.23:144120513
MNS2 NC_000142.12:144120552
MNS3 NC_000142.12:144120559
我想删除除: 和; 之间出现的数字以外的所有内容
例如,我试过:
echo "NC_000004.12:g.d.a144120555T>C;" | sed 's/:[^0-9]*/:/g; s/[^0-9]*;/;/g; s/[^0-9]*$//g'
期望的输出
NC_000004.12:144120555
【问题讨论】:
-
所有标准 UNIX 工具都将
\w和\d理解为文字字符w和d。一些对 POSIX 标准进行扩展的非标准工具和工具将其中一个或另一个解释为 POSIX 字符类[[:alnum:]_]和[[:digit:]]的简写(例如,GNU awk 接受\w,但不接受\d) ,这就是我假设您的意思是他们在您的问题中代表的意思,但是 YMMV.不过,如果这就是您的意思,那么您真的没有充分的理由不在您的问题中简单而清楚地说出“字母”或“数字”。 -
目前尚不清楚为什么
>C和>A会从您的预期输出中消失,因为它与我认为您所说的I am trying to remove every \w or \w\. that occurs after : and \d{3}不匹配