cuốn sách gpt4 ai đã làm

regex - Grep 所有不以#(哈希)或贪心空格和#(哈希)开头的行

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 09:20:39 27 4
mua khóa gpt4 Nike

Tôi đang cố gắng grep mọi thứ trong tệp conf không bắt đầu bằng

Các dòng hợp lệ bắt đầu bằng
  • hàm băm (hoặc)
  • Bất kỳ số lượng khoảng trắng (0 hoặc nhiều hơn) và hàm băm

Regex bên dưới dường như không hoạt động.

grep ^[^[[:blank:]]*#] /opt/logstash/logstash.conf

grep ^[^[[[:blank:]]*#]] /opt/logstash/logstash.conf

grep ^[^[\s]*#] /opt/logstash/logstash.conf

Tôi đang cố gắng hiểu những gì tôi đang làm sai.

FWIW, biểu thức chính quy sau hoạt động:

grep -v '^[[:blank:]]*#' /opt/logstash/logstash.conf

câu trả lời hay nhất

Đầu tiên, nếu bạn không trích dẫn biểu thức chính quy của mình, shell có thể mở rộng nó trước khi grep nhìn thấy nó, vì vậy bạn phải luôn trích dẫn biểu thức chính quy grep của mình.

Thứ hai, lý do tại sao chúng không hoạt động là:[], "biểu thức khung", khớp với bất kỳ phần tử nào chứa trong đó hoặc chúng được sử dụng [^ ...]. Có vẻ như bạn đang cố gắng khớp một chuỗi ký tự phủ định, nhưng đây không phải là [] xong.

Ngoài ra, các lớp ký tự không được đặt trong dấu ngoặc vuông trong biểu thức dấu ngoặc vuông:[^[:blank:]] thay vì [^[[:blank:]]].

Tôi không chắc liệu có phải không -v Có thể thực hiện được với các biểu thức chính quy cơ bản hoặc mở rộng, nhưng bằng cách sử dụng grep có thể thực hiện các biểu thức chính quy Perl (chẳng hạn như GNU grep), bạn có thể sử dụng giao diện phủ định:

grep -P '^(?![[:blank:]]*#)' /opt/logstash/logstash.conf

Đây là lý do tại sao biểu thức chính quy của bạn không thành công (giả sử chúng được trích dẫn):

  • ^[^[[:blank:]]*#] – Khớp với bất kỳ dòng nào bắt đầu bằng 0 hoặc nhiều ký tự, không phải bằng chữ [ hoặc để trống, theo sau là #]
  • ^[^[[[:blank:]]*#]] – Khớp với bất kỳ dòng nào bắt đầu bằng 0 hoặc nhiều ký tự, không phải bằng chữ [ hoặc để trống (lặp lại trong biểu thức ngoặc [[ với đơn [ tương tự), theo sau là #]]
  • ^[^[\s]*#] - khớp với [, \ Bất kỳ dòng nào bắt đầu bằng 0 hoặc nhiều ký tự khác ngoài S(\S hiện hữu [] không đặc biệt trong ), theo sau là #].

Nếu chúng tôi lấy tệp thử nghiệm này:

# bình luận
dòng bình thường
dòng bình thường sau dấu cách
# bình luận sau dấu cách
dòng bình thường sau tab
# bình luận sau tab
abc#] không bắt đầu bằng khoảng trống hoặc [ và có #]
[abc#] bắt đầu bằng [ và có #]
abc#]] không bắt đầu bằng khoảng trống hoặc [ và có #]]
abc#]] bắt đầu bằng khoảng trống và có #]]
sabc#]] bắt đầu bằng s và có #]]
\abc#]] bắt đầu bằng \ và có #]]

Biểu thức khớp như sau:

  • của bạn grep -v(có hiệu quả):

    $ grep -v '^[[:blank:]]*#' infile
    dòng bình thường
    dòng bình thường sau dấu cách
    dòng bình thường sau tab
    abc#] không bắt đầu bằng khoảng trống hoặc [ và có #]
    [abc#] bắt đầu bằng [ và có #]
    abc#]] không bắt đầu bằng khoảng trống hoặc [ và có #]]
    abc#]] bắt đầu bằng khoảng trống và có #]]
    sabc#]] bắt đầu bằng s và có #]]
    \abc#]] bắt đầu bằng \ và có #]]
  • 我的 grep -P(có hiệu quả):

    $ grep -P '^(?![[:blank:]]*#)' infile
    dòng bình thường
    dòng bình thường sau dấu cách
    dòng bình thường sau tab
    abc#] không bắt đầu bằng khoảng trống hoặc [ và có #]
    [abc#] bắt đầu bằng [ và có #]
    abc#]] không bắt đầu bằng khoảng trống hoặc [ và có #]]
    abc#]] bắt đầu bằng khoảng trống và có #]]
    sabc#]] bắt đầu bằng s và có #]]
    \abc#]] bắt đầu bằng \ và có #]]
  • Lần thử đầu tiên của bạn:

    $ grep '^[^[[:blank:]]*#]' tập tin
    abc#] không bắt đầu bằng khoảng trống hoặc [ và có #]
    abc#]] không bắt đầu bằng khoảng trống hoặc [ và có #]]
    sabc#]] bắt đầu bằng s và có #]]
    \abc#]] bắt đầu bằng \ và có #]]
  • Lần thử thứ hai của bạn:

    $ grep '^[^[[[:blank:]]*#]]' infile
    abc#]] không bắt đầu bằng khoảng trống hoặc [ và có #]]
    sabc#]] bắt đầu bằng s và có #]]
    \abc#]] bắt đầu bằng \ và có #]]
  • Lần thử thứ ba:

    $ grep '^[^[\s]*#]' tập tin
    abc#] không bắt đầu bằng khoảng trống hoặc [ và có #]
    abc#]] không bắt đầu bằng khoảng trống hoặc [ và có #]]
    abc#]] bắt đầu bằng khoảng trống và có #]]

Về biểu thức chính quy - Grep tất cả các dòng không bắt đầu bằng #(hash) hoặc khoảng trắng tham lam và #(hash), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42321337/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress