манипулирование регулярными выражениями и подстановка строк - альтернатива sed - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть следующий файл

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

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Это может помочь!

sed -i.bak 's/g\.//g; s/\w>\w//g' filename

для (NC.*?): concat, битовое объяснение о конечном выводе поможет, хотя это может работать:

s/NC[0-9]?:/:/
1 голос
/ 03 февраля 2020

Если Perl вариант для вас:

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

perl -ape 's/:\D+(\d+).*?(?=;|$)/:$1/g' file.txt 
ID      Location
MNS1    NC_000004.12:144120555;NC_001423.23:144120513
MNS2    NC_000142.12:144120552
MNS3    NC_000142.12:144120559

Объяснение:

s/            # substitute
    :           # colon
    \D+         # 1 or more non digits
    (\d+)       # group 1,, 1 or more digit
    .*?         # 0 or more any character but bewline, not greedy
    (?=;|$)     # positive lookahead, make sure we have semi-colon or end of line
/             # with
    :           # colon
    $1          # content of group 1 (i.e. the digits)
/g            # end, global
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...