In tất cả các dòng không chứa dấu chấm câu


8

Tôi muốn một mẫu regex có thể in tất cả các dòng không chứa dấu chấm câu:

Đầu vào :

.This is line 1
This is ! line 2
This is line (3)
This is line 4

Đầu ra: (nên)

This is line 4

Những gì tôi đã cố gắng cho đến nay:

grep '[^[:punct:]]' file.txt

Nhưng nó cho thấy tất cả các ký tự không được chấm câu.

Câu trả lời:


11

In của bạn greptất cả các dòng có chứa các ký tự không dấu chấm câu. Điều đó không giống như in tất cả các dòng không chứa ký tự dấu chấm câu.

Đối với phần sau, bạn muốn -vchuyển đổi (các dòng in không khớp với mẫu):

grep -v '[[:punct:]]' file.txt

Nếu, vì một số lý do bạn không muốn sử dụng công -vtắc, bạn phải đảm bảo rằng toàn bộ dòng bao gồm các ký tự không dấu chấm câu:

grep '^[^[:punct:]]\+$' file.txt

+1 cảm ơn. Có cách nào mà không sử dụng -vchuyển đổi?
Hamed Kamrava

@HamedKamrava Vâng. Xin vui lòng xem chỉnh sửa của tôi.
Joseph R.

@HamedKamrava Vì tò mò: tại sao bạn muốn tránh -v?
Bernhard

Tôi không tránh -vchỉ muốn biết thêm :)
Hamed Kamrava

@HamedKamrava Xin đừng quên đánh dấu câu trả lời này 'Được chấp nhận' nếu nó giải quyết được vấn đề của bạn.
Joseph R.

1

Trong sed bạn có thể làm một cái gì đó như:

sed '/[[:punct:]]/!d'

Trong awk bạn có thể làm:

awk '!/[[:punct:]]/'


1

Một Perlcái:

perl -nle 'print unless /\p{XPosixPunct}/' file

Điều này sẽ khớp -! "# $% & '() * + ,. /:; <=>? @ [\] ^ _` {|} ~ Mà unicode xem xét Dấu câu và Biểu tượng.

hoặc là:

perl -nle 'print unless /\p{Punct}/' file

\p{Punct}chỉ khớp -! "#% & '() * ,. /:;? @ [\] _ {} , thiếu $ + <=> ^` | ~ mà unicode xem xét các Biểu tượng.

perltheo mặc định sử dụng ngôn ngữ POSIX. Nếu bạn không sử dụng perl, bạn nên đặt tất cả LC_ALL=POSIX, vì các ngôn ngữ khác nhau có thể có các ký tự dấu chấm câu khác nhau như SAA C¢.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.