Поскольку «-24» больше «0» на основе сравнения строк - три символа против одного символа. Для сравнения чисел:
$ [[ -24 -gt 0 ]] && echo "Hi"
$
Как указывает @steeldriver, это легко, если у вас не жадные регулярные выражения. Если нет, вы можете сделать это с помощью цикла, например:
sed ':a;s/PATTERN-2/\n/;s/PATTERN-1.*\n//;ta' test.txt
Это работает, потому что мы знаем, что в середине любой строки нет новых строк. Он также будет работать с любым другим символом, который не встречается ни в одной строке, например §
.
Если вы хотите использовать только sed, попробуйте, как показано ниже
sed 's/PATTERN-1[^P]*PATTERN-2//g' test.txt
Это легко сделать в реализациях регулярных выражений, которые поддерживают не -жадные квалификаторы, такие как perl ?
Например:
perl -pe 's/PATTERN-1.*?PATTERN-2//g' test.txt
«Ближайший» на самом деле не является термином sed. Но если существует разумное ограничение на количество повторений последовательности PATTERN-1.*PATTERN-2
, вы можете жестко закодировать это число следующим образом:
$ sed -E 's/(PATTERN-1).*(PATTERN-2)(.*)\1.*\2/\3/g;s/PATTERN-1.*PATTERN-2//g' <<"end"
PATTERN-1xxxxPATTERN-2aaa
PATTERN-1xxxxPATTERN-2fffPATTERN-1zzzzPATTERN-2gggPATTERN-1zzzzPATTERN-2
PATTERN-1xxxxPATTERN-2bbb
end
aaa
ggg
bbb
Обратите внимание, что я использую параметр -E
для расширенного синтаксиса регулярных выражений. Также обратите внимание, что в выражении поиска я использую обратные ссылки для строк PATTERN -1 и -2, просто для вашего удобства.