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?
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?
Câu trả lời:
Đâ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.
awk '/^\(/' testfile.txt
Kết quả
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
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
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
Bạn có thể làm ngược lại.
grep -v '^[^(]' file
hoặc là
sed '/^[^(]/d' file
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.
(, không chỉ những dòng bắt đầu bằng một.