sed и удалить строку между двумя шаблонами

Поскольку «-24» больше «0» на основе сравнения строк - три символа против одного символа. Для сравнения чисел:

$ [[ -24 -gt 0 ]] && echo "Hi"
$ 
3
11.01.2017, 22:38
4 ответа

Как указывает @steeldriver, это легко, если у вас не жадные регулярные выражения. Если нет, вы можете сделать это с помощью цикла, например:

sed ':a;s/PATTERN-2/\n/;s/PATTERN-1.*\n//;ta' test.txt

Это работает, потому что мы знаем, что в середине любой строки нет новых строк. Он также будет работать с любым другим символом, который не встречается ни в одной строке, например § .

3
27.01.2020, 21:18

Если вы хотите использовать только sed, попробуйте, как показано ниже

sed 's/PATTERN-1[^P]*PATTERN-2//g' test.txt
1
27.01.2020, 21:18

Это легко сделать в реализациях регулярных выражений, которые поддерживают не -жадные квалификаторы, такие как perl ?Например:

perl -pe 's/PATTERN-1.*?PATTERN-2//g' test.txt
0
20.11.2021, 11:58

«Ближайший» на самом деле не является термином 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, просто для вашего удобства.

0
20.11.2021, 13:23

Теги

Похожие вопросы