Vì vậy, tôi khá tốt với các biểu thức thông thường, nhưng tôi đang gặp một số rắc rối với chúng trên Unix. Dưới đây là hai điều tôi rất muốn biết làm thế nào để làm:grep trên unix/linux: cách thay thế hoặc chụp văn bản?
1) Thay thế tất cả văn bản ngoại trừ chữ cái, số, và nhấn
Trong PHP tôi muốn làm điều này: (các công trình lớn)
preg_replace('#[^a-zA-Z0-9_]#','',$text).
Trong bash tôi đã thử điều này (với thành công hạn chế); có vẻ như nó doesnt phép bạn sử dụng toàn bộ các regex:
text="my #1 example!" ${text/[^a-zA-Z0-9_]/'')
Tôi đã thử nó với sed nhưng nó vẫn có vẻ có vấn đề với các thiết lập regex đầy đủ:
echo "my #1 example!" | sed s/[^a-zA-Z0-9\_]//
Tôi chắc chắn có một cách để làm điều đó với grep cũng vậy, nhưng nó đã phá vỡ nó thành nhiều dòng khi tôi đã cố gắng:
echo abc\!\@\#\$\%\^\&\*\(222 | grep -Eos '[a-zA-Z0-9\_]+'
Và cuối cùng tôi cũng đã cố gắng sử dụng expr nhưng nó có vẻ như vậy có thực sự hỗ trợ hạn chế cho regex mở rộng ...
2) Capture (nhiều) các bộ phận của văn bản
Trong PHP tôi chỉ có thể làm một cái gì đó như thế này:
preg_match('#(word1).*(word2)#',$text,$matches);
Tôi không chắc chắn điều đó có thể thực hiện được như thế nào trong * nix ...
Xem thêm: 'perl' – derobert