Lưu văn bản từ tập tin giữa hai ký tự cho trước và lưu đầu ra vào tập tin?


0

Tôi có một tập tin với các loại văn bản sau:

@ heading with some text
the.actual.text.of.choice
which.can.be.several.lines
in.length.with.no.pattern
+
more.text.that.i.want.to
remove.several.lines.long

Tôi đã thử với những điều sau đây:

perl -pe '^@ .* $+' input_file.txt > output_file.txt

mà tôi đọc là: '@ ở đầu dòng, theo sau là bất kỳ số lượng ký tự nào và kết thúc bằng + ở cuối dòng'. Nhưng tôi đã nhận được lỗi sau:

syntax error at -e line 1, near "^"
Execution of -e aborted due to compilation errors.

Vì tôi khá mới với regex, bạn có thể vui lòng cho tôi biết tôi sai ở đâu không? Và có cách nào để làm điều đó trực tiếp với grep? Có thể với các tùy chọn -fhoặc -E?


Câu trả lời:


0

do{local $/; <STDIN>} đọc tất cả đầu vào thành một chuỗi.

=~ /^@[^+]+\+/gmkhớp chuỗi với regex (một dòng bắt đầu bằng @, theo sau là bất kỳ char nào ngoại trừ +, kết thúc bằng +).

print $& in toàn bộ trận đấu.

cat input_file.txt | perl -e 'do{local $/; <STDIN>} =~ /^@[^+]+\+/gm; print $&' > output_file.txt
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.