Vì vậy, có lẽ tôi nên sử dụng grep
cho việc này. Miễn là tôi cần tìm kiếm đệ quy tôi nên sử dụng grep -r
. Nhưng sau đó tôi không biết mình nên làm gì tiếp theo;)
Làm thế nào tôi có thể làm điều đó?
Vì vậy, có lẽ tôi nên sử dụng grep
cho việc này. Miễn là tôi cần tìm kiếm đệ quy tôi nên sử dụng grep -r
. Nhưng sau đó tôi không biết mình nên làm gì tiếp theo;)
Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Bạn có thể sử dụng hai greps được kết nối bằng một đường ống:
grep -r '.\{100\}' /path | grep 'if'
Để loại trừ các tệp có if
trong đường dẫn hoặc tên của chúng, hãy sử dụng ':.*if'
thay vì 'if'
(vẫn có thể ngắt nếu tên tệp hoặc đường dẫn của bạn chứa dấu hai chấm).
if
trong đường dẫn của chúng
':.*if'
để ngăn chặn điều đó (trừ khi tên tệp của bạn chứa dấu hai chấm).
Với grep
các hỗ trợ tùy chọn ( -r
đệ quy) và -P
(PCRE) (hoặc pcregrep
với -r
):
grep -rP '^(?=.{101}).*?if' .
Hoặc POSIXly:
find . -type f -exec awk 'length > 100 && /if/ {
print FILENAME ": " $0}' {} +
(lưu ý rằng hành vi sẽ khác nhau giữa các lần triển khai đối với các tệp không phải là văn bản (các tệp chứa ký tự không, giá trị byte bằng 0, dòng quá dài hoặc dữ liệu sau dòng mới nhất). Cũng lưu ý rằng một số grep
triển khai sẽ tìm kiếm trong các tệp không thường xuyên hoặc sẽ theo liên kết tượng trưng).
grep
điều là có, và thậm chí một điều đó đòi hỏi sự hỗ trợ của nó được tích hợp sẵn để lib c hoạt động như tôi hiểu. Có nhiều hơn không?
grep
từ ast-open có triển khai regexps giống như perl. Các triển khai grep hỗ trợ grep -rP
bao gồm GNU, FreeBSD / OS / X (viết lại của GNU grep bây giờ đang chuyển hướng) và ast-open's
Sử dụng awk để đếm kích thước $ 0 và sự hiện diện của chuỗi con nếu?
awk '( length($0) > 100 && index($0,"if") ){print}' file
Nếu "nếu" phải là một từ (trái ngược với chuỗi con đơn giản), bạn có thể sử dụng
awk '( length($0) > 100 && match($0,/\<if\>/) ){print}' file
awk
sẽ giống như awk 'length > 100 && /if/' file
. Lưu ý rằng /\<if\>/
, bạn cần GNU awk
.
Được điều chỉnh từ Tìm bất kỳ dòng nào vượt quá độ dài nhất định, bất kỳ dòng nào sau đây sẽ hoạt động để tìm dòng dài hơn 100 ký tự
grep '.\{100\}' file
perl -nle 'print if length$_>99' file
awk 'length($0)>99' file
sed -n '/.\{100\}/p' file
chọn phương pháp ưa thích của bạn và dẫn nó qua grep if
sed -n '/.\{100\}/{/if/p}' file
. Tương tự như perl one:perl -nle 'print if length$_>99 && /if/'
với một đĩa đơn grep
:
grep -vxE '.{0,99}|([^i]|i[^f])*i*' <in >out
sẽ chỉ chọn các dòng không thể được mô tả từ đầu đến đuôi bằng một trong hai câu lệnh. và do đó, bất kỳ dòng nào có thể được mô tả là bao gồm từ 0 đến 99 ký tự sẽ không được chọn và tương tự bất kỳ dòng nào khớp với hơn 99 ký tự mà vẫn không chứa ít nhất một ký tự nếu không sẽ được chọn.
printf '^%-100b$\n' 'if\nif' 'hey if' i if |
grep -nvxE '.{0,99}|([^i]|i[^f])*i*'
3:^hey if $
5:^if $
bạn có thể làm tốt hơn chỉ để sử dụng hai grep
s, mặc dù.
find . -type f -exec awk 'length > 100 && /if/' {} +