Два ступают, принимая удар. Принятие, что 2 строки удалены после строк, содержащих "шаблон".Примечание: Строка, которая содержит шаблон, НЕ удалена, но после этого удалены 2 строки.
Удалить N
строки, изменение A2
-> AN
в grep аргументах
grep -n -A2 pattern inputFile | grep -Ev pattern | sed 's/^\([0-9]*\)-.*/\1/g' > linesToRemove
while read p; do sed -i "${p}d" inputFile; done < linesToRemove
Если Вы также хотите удалить строку, содержащую шаблон, изменить команду grep на
grep -n -A2 pattern inputFile | sed 's/^\([0-9]*\)[-:].*/\1/g' > linesToRemove
Объяснение: Первая команда узнает номера строки строк, которые будут удалены. Вторая команда удаляет эти строки один за другим. Используйте http://explainshell.com/ для узнавания больше или просто man grep
Если Ваш sed не имеет -i
опция, считайте https://stackoverflow.com/a/15400287/1729501
Пример
Мне нравится немного расслабить запрос и поискать любой [1124185]. поэтому[1124186] файлы, поэтому я поменял местами [1124187].3[1124188] на [1124189]*[1124190].
ПРИМЕЧАНИЕ:[1124192] Вышеуказанный запрос ([1124193]-q[1124194]) на файлы ([1124195]-f[1124196]), соответствующие шаблону ([1124197]*/libltdl.so*[1124198]). Первая звездочка важна, так как запрос ищет совпадения с полными путями файлов внутри RPM, хранящихся в различных YUM-хранилищах, о которых знает ваша система.[1123786].
Это работало для меня на Fedora 21 (x64):
rpm -Uvh iscan-2.30.1-1.usb0.1.ltdl3.x86_64.rpm --nodeps
ln -s /usr/lib64/libltdl.so.7 /usr/lib64/libltdl.so.3
Iscan, кажется, работает нормально с более новой библиотекой