Câu trả lời:
Bạn có thể sử dụng sedcho việc này. Trên BSD sed:
echo "foo 'bar'" | sed -E "s/.*'([^']+)'.*/\\1/"
Hoặc, không có -Etùy chọn:
sed "s/.*'\([^']\+\)'.*/\1/"
Điều này không làm việc cho đầu vào đa dòng. Cho rằng bạn cần:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
( ) +sử dụng \( \) \+: Điều này thực sự giống nhau:sed "s/.*'\([^']\+\)'.*/\1/"
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Mặc dù grep không thể xuất một nhóm cụ thể, bạn có thể sử dụng lookahead và đằng sau các xác nhận để đạt được những gì sau:
echo "foo 'bar'" | grep -Po "(?<=')[^']+(?=')"
grep -Pkhông có sẵn trên tất cả các nền tảng. Nhưng nếu có, sử dụng lookahead / đằng sau là một cách giải quyết vấn đề rất hay.