Удалить набор строк из файла в Perl - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть файл Verilog, который выглядит следующим образом:

Line1
Line2
Line3
module1
Line4
Line5
Line6
endmodule
Line7
Line8
module2
Line9
Line11
Line12
Line13
endmodule
Line15
Line16

Здесь я хочу удалить целые модули, и имена модулей будут указаны мной.Пример: я хочу удалить module1, поэтому я хочу, чтобы строки из module1 в endmodule были удалены (module1, Line4, Line5, Line6, endmodule).И оставьте остальные оставшиеся модули без изменений.

Мой ожидаемый результат при удалении module1:

Line1
Line2
Line3
Line7
Line8
module2
Line9
Line11
Line12
Line13
endmodule
Line15
Line16

Как мне это сделать?

1 Ответ

0 голосов
/ 15 сентября 2018

Для этого я бы использовал sed, а не perl:

sed -e '/module1/,/endmodule/d' input.txt

X,Y указывает диапазон строк для выполнения чего-либо, начиная с строки, совпадающей с X, и заканчивая строкой, совпадающей с Y, а команда d в основном говорит об удалении текущей строки вместо ее печати как обычно.

Если вы используете perl, скалярная форма оператора диапазона (..) допускает то же самое:

perl -ne 'print unless /module1/ .. /endmodule/' data.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...