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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.