#linux #bash #sed
#linux #баш #sed
Вопрос:
Мне нужно удалить все строки в данном файле, содержащие слово le
, если оно появляется между 3-й и 10-й позицией (символом).
Я много искал по этому поводу и не смог найти ничего о том, как определить начальную и конечную позиции
Это моя sed
команда:
sed '/^.{3}le.{10}/d' file-name
Ответ №1:
Вы можете использовать
sed '/^.{3}.{0,5}le/d' filename
Регулярное выражение POSIX BRE означает:
^
— начало строки.{3}
— любые три символа.{0,5}
— любые символы от нуля до пятиle
—le
подстрока.
Итак, 3 5 равно 8, а le
длина равна 2, поэтому шаблон удаляет только строки, которые содержат le
между третьей и десятой позициями.
Вы также можете использовать awk
:
awk '!index(substr($0,4,6), "le")' filename
Здесь,
substr($0,4,6)
— возвращает подстроку из 6 символов, начинающуюся с четвертого символа!index(..., "le")
— возвращает true , если приведенная выше подстрока не содержитle
.