Czy można użyć GNU grep, aby uzyskać dopasowaną grupę z wyrażenia?
Przykład:
echo "foo 'bar'" | grep -oE "'([^']+)'"
Który wyprowadziłby „słupek”. Ale chciałbym dostać tylko „pasek”, bez konieczności wysyłania go jeszcze raz przez grep (tj. Pobierz dopasowaną grupę). Czy to jest możliwe?
( ) +
użycia\( \) \+
: To jest właściwie to samo:sed "s/.*'\([^']\+\)'.*/\1/"
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Chociaż grep nie może wypisać konkretnej grupy, możesz użyć funkcji lookahead i asercji, aby osiągnąć to, czego potrzebujesz:
źródło
grep -P
nie jest dostępny na wszystkich platformach. Ale jeśli tak jest, użycie lookahead / behind jest bardzo dobrym sposobem na rozwiązanie problemu.Możesz użyć,
\K
aby zresetować i odrzucić tekst dopasowania po lewej stronie wraz z lookahead, który nie jest dodawany do tekstu dopasowania:Tylko GNU grep.
źródło