2016-03-08 3 views
1

Я пытаюсь отредактировать некоторые файлы fastq.Использование sed для замены строк, содержащих специальные символы

По сути я хочу изменить:

@SRX1409044.10.1 10 length=80 

к:

@SRX1409044.10/1 10 length=80 

для каждой строки, которая содержит .1 в файле.

Я попытался с помощью СЭД:

sed 's#.1#/1#g' 

Он работает для большинства линий, однако для линий, таких как:

@SRX1409044.11.1 11 length=80 

я получаю:

@SRX1409044./1/1 /1 length=80 

Я был поиск вокруг, и я думаю, что мне, возможно, придется избегать специальных символов? Каждое сообщение, на которое я натолкнулся, только приводило примеры для обмена специальными персонажами самостоятельно, поэтому я не слишком уверен, как это сделать.

+0

'sed 's # \. 1 #/1 # g''? – 7171u

ответ

0

Эта команда изменяет первое вхождение .1 (точку с последующим 1 и пробелом) на каждой линии к /1 – уведомления экранированием .:

sed 's|\.1 |/1 |' infile 

Для входного файла, например, такие, как

@SRX1409044.10.1 10 length=80 
@SRX1409044.12.1 10 length=80 
@SRX1409044.14.1 10 length=80 
@SRX1409044.15.1 10 length=80 
@SRX1409044.990.1 10 length=80 

результат

@SRX1409044.10/1 10 length=80 
@SRX1409044.12/1 10 length=80 
@SRX1409044.14/1 10 length=80 
@SRX1409044.15/1 10 length=80 
@SRX1409044.990/1 10 length=80 

Теперь, если .1 также может быть в конце строки, мы должны немного изменить команду, потому что мы требуем пространства в данный момент:

sed 's#\.1\(\|$\)#/1\1#' infile 

Это ".1 следует либо пробел или конец линии, замените на /1 и все, что пришло после .1 ". Например:

$ sed 's#\.1\(\|$\)#/1\1#' <<< 'SRX1409044.116884523.1' 
SRX1409044.116884523/1 
0

Десятичная точка . избавилась, как \.

Я думаю, ваша проблема в том, что вам нужно различать одиночные цифры и двузначные цифры.

Если вы не имеющие более 2-х цифр проще всего повторить регулярное выражение дважды, как:

[0-9][0-9] 

Соответствует любой номер или цифры 2 последовательность цифр.

  • , так как я не знаю, какая версия СЭД вы используете, и что его расширенные способности.

Также я не уверен, что вы хотите принять, и что вы хотите отклонить.

+0

Файл относится к 'SRX1409044.1.1'' 'SRX1409044.116884523.1' Единственное изменение, которое я бы хотел, чтобы sed сделал, меняется .1 в конце на/1. Я использую sed версии 4.2.2 (GNU sed). – markryan

Смежные вопросы