Вы должны протестировать решение с меньшим файлом.
Я сделал тестовый файл с
for ((i=0;i<50;i++)); do echo "$((i%11))exampleABC123..$i" ; done > inputfile
Каждая 11-я строка на одну позицию длиннее, и ABC начинается с позиции 10 на этих строках. Как удалить только эти строки?
Вы начинаете считать с начала (^
), принимаете 9 случайных символов (.{9}
), за которыми следует строка, которая должна соответствовать, и удаляете их (/d
)
sed -r '/^.{9}ABC123/d' inputfile
Когда у вас больше правил, поисковое выражение становится более сложным.
Предположим, вы также хотите удалить строки, начинающиеся с 5 или заканчивающиеся на 9.
sed -r '/^.{9}ABC123|^5|9$/d' inputfile
Если у вас есть больше правил, создайте файл конфигурации (и добавьте комментарий), как этот файл exclude.sed
/^.{9}ABC123/d # Search for ABC123 on position 10
/^5/d # Lines starting with a 5
/9$/d # Lines finishing with a 9
Теперь проанализируйте ваш ввод с правилами, указанными в вашей конфигурации
sed -rf exclude.sed inputfile