Объединение нескольких greps с регулярным выражением

Даны два файла с именами "старые"...

$ cat old
old1
old2
old3

и «новый»

$ cat new
new1
new2
new3

Вы можете создать файл сценария для sed следующим образом:

$ paste old new | while read old new; do printf "s/%s/%s/g\n" "$old" "$new"; done |tee sedfile
s/old1/new1/g
s/old2/new2/g
s/old3/new3/g

И используйте этот файл с sed:

sed -f sedfile mulipath.conf > review-this.conf
0
19.10.2021, 13:11
2 ответа

Используя стандарт grep, вы должны предоставить утилите отдельные выражения, с которыми вы хотите сопоставить строки.

grep \
    -e 'Horse' \
    -e '[[:digit:]]\{1,\} replies' \
    -e '[[:digit:]]\{1,\}[[:alpha:]]\{1,\}[[:digit:]]\{1,\}' file

\{n,m\}заставляет предыдущее выражение соответствовать как минимум nраз, и не более mраз. Это означает, что \{1,\}делает предыдущее выражение совпадающим хотя бы один раз, точно так же, как +сделал бы это в расширенном регулярном выражении POSIX.

1
19.10.2021, 18:08

Использование Raku (, ранее известного как Perl _6)

raku -ne '.put if.grep( m:i/ horse / | / <digit>+ <ws> replies / | / <digit>+ <alpha>+ <digit>+ / );'

Пример ввода:

10 replies
Big Horse
123sdf562
replies
1354654
Fat Cat
2 replies
White Horse
Big Cat
Little Dog
5 replies
725vgfvjgh123
Black Horse
Brown Cow
8798jgjh

Пример вывода:

10 replies
Big Horse
123sdf562
2 replies
White Horse
5 replies
725vgfvjgh123
Black Horse

Вот решение с использованием Raku, члена семейства языков программирования Perl -. Работа над Raku (, также известной как Perl6 ), началась в 2000 году и включает в себя существенный пересмотр PCRE (Регулярные выражения ), который некоторые люди находят более удобочитаемым.

В приведенном выше коде используется команда Raku grep, которая может принимать несколько m/…/сопоставителей регулярных выражений, в данном случае связанных |логическим ИЛИ. Обратите внимание, что первый сопоставитель допускает нечувствительное к регистру -сопоставление horse, поскольку он использует нечувствительное к регистру :i«наречие» -. Если вы хотите, чтобы совпадало только Horse, измените соответствующим образом (и удалите наречие :i).

Конечно, стоит быть осторожным при написании регулярных выражений, и вы должны отметить, что m/ Horse /будет соответствовать не только Big Horse, Black Horseи White Horse, но и Horse-faced. Вам могут понадобиться строки, содержащие Horse, только если им предшествует другое слово с промежуточным пробелом, и в этом случае m/ <alpha>+ <ws> Horse /может соответствовать всем требованиям.

https://docs.raku.org/language/regexes
https://raku.org

0
24.10.2021, 04:49

Теги

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