簡體   English   中英

grep 搜索 pipe 術語參數列表太長

[英]grep search for pipe term Argument list too long

我有類似的東西

grep ... | grep -f - *orders* 

其中第一個grep ... 給出了訂單號列表,例如

1393
3435
5656
4566
7887
6656

我想在多個文件( a_orders_1b_orders_3等)中找到這些訂單,這些文件看起來像

1001|strawberry|sam
1002|banana|john
...

但是,當第一個 grep... 返回太多訂單號時,我收到錯誤“參數列表太長”。

我還嘗試使用 while 循環一次給grep命令一個訂單號,但這太慢了。 我做了

grep ... | while read order; do grep $order *orders*; done

我對 Unix 很陌生,非常感謝解釋,謝謝!

問題是grep... | grep -f - *orders**orders*的擴展... | grep... | grep -f - *orders* 您的 shell 在將該列表傳遞給grep之前將模式擴展為完整的文件列表。

所以我們需要向每個grep調用傳遞更少的“訂單”文件。 find程序是一種方法,因為它接受通配符並在內部擴展它們:

find . -name '*orders*' # note this searches subdirectories too

現在您知道如何在不遇到命令行長度限制的情況下生成文件名列表,您可以告訴find執行第二個 grep:

grep ... | find . -name '*orders*' -exec grep -f - {} +

{}find放置文件名的地方, +終止命令並讓find知道您可以將多個 arguments 傳遞給每次調用grep -f ,同時仍然通過調用grep -f more 來遵守命令行長度限制如果文件列表超過單個命令的允許長度,則不止一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM