GNU grep peut également prendre en charge le look-ahead et le look-back positif et négatif : Dans votre cas, la commande serait :
echo "Here is a string" | grep -o -P '(?<=Here).*(?=string)'
S'il y a plusieurs occurrences de Here
y string
vous pouvez choisir si vous voulez correspondre à partir de la première. Here
et enfin string
ou les faire correspondre individuellement. En termes de regex, on parle de correspondance gourmande (premier cas) ou correspondance non avide (deuxième cas)
$ echo 'Here is a string, and Here is another string.' | grep -oP '(?<=Here).*(?=string)' # Greedy match
is a string, and Here is another
$ echo 'Here is a string, and Here is another string.' | grep -oP '(?<=Here).*?(?=string)' # Non-greedy match (Notice the '?' after '*' in .*)
is a
is another