Apakah mungkin untuk menggunakan GNU grep untuk mendapatkan grup yang cocok dari ekspresi?
Contoh:
echo "foo 'bar'" | grep -oE "'([^']+)'"
Yang akan menghasilkan "'bar'". Tetapi saya hanya ingin mendapatkan "bar", tanpa harus mengirimkannya melalui grep sekali lagi (mis. Dapatkan grup yang cocok). Apakah itu mungkin?
( ) +
digunakan\( \) \+
: Ini sama saja:sed "s/.*'\([^']\+\)'.*/\1/"
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Meskipun grep tidak dapat menampilkan grup tertentu, Anda dapat menggunakan lookahead dan di belakang pernyataan untuk mencapai apa yang Anda inginkan:
sumber
grep -P
tidak tersedia di semua platform. Tetapi jika ya, menggunakan lookahead / belakang adalah cara yang sangat bagus untuk menyelesaikan masalah.Anda dapat menggunakan
\K
untuk mengatur ulang dan membuang teks pertandingan tangan kiri bersama dengan lookahead yang tidak ditambahkan ke teks pertandingan:Hanya GNU grep.
sumber