Совпадение двух последовательных строк, используя только функции Regex и Bash - PullRequest
0 голосов
/ 21 января 2019

Какие регулярные выражения вы можете использовать для сопоставления двух последовательных строк?Цель не в том, чтобы использовать какие-либо пакеты, такие как awk или sed, но использовать только чистый RegExp внутри скрипта оболочки.

Пример. Я бы хотел убедиться, что после слова "hello" сразу следует "world""в следующей строке.

Критерии принятия:

  • " hello "не должно содержать пробелов перед
  • " world "должен иметь хотя бы 1 илибольше места перед ним.
#/bin/bash

file=./myfile.txt

regex='^hello'

[[ `cat $file` =~ $regexp ]] && echo "yes" || echo "no"

myfile.txt

abc is def
hello
 world
cde is efg

1 Ответ

0 голосов
/ 21 января 2019

Вот чистый способ:

file='./myfile.txt'
[[ $(<$file) =~ hello$'\n'[[:blank:]]*world ]] && echo "yes" || echo "no"

yes

Здесь $'\n' соответствует новой строке, а [[:blank:]]* соответствует 0+ пробелам или пробелам.

Если вы хотите быть более точным, используйте:

[[ $(<file) =~ (^|$'\n')hello$'\n'[[:blank:]]*world($'\n'|$) ]] && echo "yes" || echo "no"

Однако grep или awk - гораздо лучшие инструменты для этой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...