Grep đầu dòng


15

Tôi có một tập tin với các nội dung sau:

(((jfojfojeojfow 
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld

Làm cách nào tôi có thể trích xuất mọi dòng bắt đầu bằng dấu ngoặc đơn?


4
Vì một số lý do, tôi đọc "Grep
— start

Câu trả lời:


32

Biểu tượng cho sự bắt đầu của một dòng là ^. Vì vậy, để in tất cả các dòng có ký tự đầu tiên là a (, bạn sẽ muốn khớp ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

6

Sử dụng perl

perl -ne '/^\(/ && print' foo

Đầu ra:

(((jfojfojeojfow 
(((jfojfojeojfow

Giải thích (phần regex)

  • /^\(/

    • ^ khẳng định vị trí khi bắt đầu chuỗi
    • \(phù hợp với nhân vật theo (nghĩa đen

4

Đây là một bashlót:

while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt

Ở đây chúng tôi đang đọc từng dòng đầu vào và nếu dòng bắt đầu bằng (, dòng được in. Các thử nghiệm chính được thực hiện bởi [[ $i =~ ^\( ]].

Sử dụng python:

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        if line.startswith('('):
            print line.rstrip()

Ở đây line.startswith('(')kiểm tra nếu dòng bắt đầu bằng (, nếu vậy thì dòng được in.


3

ôi

awk '/^\(/' testfile.txt

Kết quả

$ awk '/^\(/' testfile.txt                   
(((jfojfojeojfow 
(((jfojfojeojfow

Con trăn

Như python one-liner:

$ python -c 'import sys;print "\n".join([x.strip() for x in sys.stdin.readlines() if x.startswith("(")])' < input.txt    
(((jfojfojeojfow
(((jfojfojeojfow

Hay cách khác:

$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt

Nhìn BSD

looklà một trong những tiện ích Unix cổ điển nhưng ít được biết đến, xuất hiện trở lại trong phiên bản Unix của AT & T 7. Từ man look:

Tiện ích look hiển thị bất kỳ dòng nào trong tệp có chứa chuỗi làm tiền tố

Kết quả:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow

2

Bạn có thể làm ngược lại.

grep -v '^[^(]' file

hoặc là

sed '/^[^(]/d' file

Nếu tệp đầu vào chứa các dòng trống, các dòng trống cũng được hiển thị.
— AB

1

Sử dụng lệnh grep cho việc này. Giả sử tệp có nội dung được đề cập được gọi là t.txt:

user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow

Với '--color' là đối số xa hơn, bạn thậm chí có thể nhìn thấy màu trong thiết bị đầu cuối phù hợp. Hướng dẫn này cũng không phù hợp với dòng trống.


4
Điều đó sẽ in tất cả các dòng chứa a (, không chỉ những dòng bắt đầu bằng một.
— terdon

Như terdon đã nói.
— kos

1
Đúng. Bỏ lỡ ký tự '^' để bắt đầu trận đấu ở đầu dòng. Xin lỗi vì điều đó.
— thedler

1
Bây giờ thì tốt hơn =) +1
— AB
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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.