2015-12-04 4 views
-1

У меня есть несколько файлов .csv в каталоге под названием mydirectory. Каждый файл содержит строку, начинающуюся с #GENE_ANNOTATIONS. Я хочу удалить все строки до этой строки, включая эту строку, плюс одну строку ниже этой строки. Я хочу, чтобы это применялось ко всем файлам и сохраняло их. Есть ли команда unix/awk/perl для этого?Удалить некоторые строки, соответствующие шаблону в нескольких файлах в каталоге

+0

@MattJacob Что это? Будете ли вы любезны поделиться этим не так-американским образом? – MAPK

+0

Конечно. Покажите мне, над чем вы работали, и я буду рад помочь вам исправить все, что с ним не работает. –

ответ

3

С GNU СЭД:

sed -i '0,/^#GENE_ANNOTATIONS/{/^#GENE_ANNOTATIONS/{N};d;}' mydirectory/* 
+1

Я думаю, что это может не работать так, как предполагалось, поскольку каждый раз, когда выполняются команды sed, две строки будут считаны в пространстве шаблонов. Возможно, вы предполагали, что только последняя строка будет читаться в дополнительной строке, т.е. 'sed -i '1,/^ # GENE_ANNOTATIONS/{/^# GENE_ANNOTATIONS/N; d;}' mydirectory/*' – potong

+0

@potong: Thank вы за этот намек. Я обновил свой ответ и исправил вторую ошибку. Он работает и сейчас, если '# GENE_ANNOTATIONS' является первой строкой. – Cyrus

+0

@potong: Спасибо. Я обновил свой ответ. – Cyrus

0

Это может работать для вас (GNU СЭД):

sed -ni '/^#GENE_ANNOTATIONS/,$!b;n;n;:a;p;n;ba' mydirectory/* 

печатать только строки, которые вы хотите, позволяя переключатель -n.

Другой вариант:

sed '/^#GENE_ANNOTATIONS/,$!d;x;/./{g;b};x;h;N;d' mydirectory/* 
Смежные вопросы