Если вы хотите использовать /etc/network/interfaces, то просто удалите или отключите network-manager
Такие задачи лучше подходят для awk
imo
$ awk '!/^ /{f=0} /^banana/{f=1} f' fruits.txt
banana starts matching
this line should match
this too
and this
$ awk '!/^ /{f=0} /^banana/{f=1} !f' fruits.txt
apple
mango
pomelo
!/^ /
условие выполняется для строки, начинающейся с banana
, а также !/^ /{f=0}
если строка не начинается с пробела, снять флаг /^banana/{f=1}
установить флаг, если строка начинается сbanana
f
печатает строки, соответствующие условию, а !f
отрицает условие Использование вами \s
в регулярном выражении означает, что выражение может потреблять новые строки. Я недостаточно знаком с тем, как -v
реализован в pcregrep, чтобы понять, почему это не инверсия, но я почти уверен, что причина именно в этом.
Если вы измените свой файл на:
apple
banana starts matching
this line should match
this too
and this
mango
pomelo
Тогда даже без -v
совпадение выглядит не так, как вы задумали.
$ pcregrep -M 'banana.*\n(\s.*\n)*' fruits.txt
banana starts matching
this line should match
this too
and this
mango
pomelo
Если действительно должен совпадать только пробел в начале строки, я предлагаю заменить \s
на один или несколько пробелов " +"
.
Когда я изменяю регулярное выражение на 'banana.*\n( +.*\n)*'
, оно соответствует (как обычному, так и обратному )способом, который я считаю более правильным. Возможно, используйте [ \t]+
, если также разрешены вкладки.