[英]grep search for pipe term Argument list too long
我有類似的東西
grep ... | grep -f - *orders*
其中第一個grep
... 給出了訂單號列表,例如
1393
3435
5656
4566
7887
6656
我想在多個文件( a_orders_1
、 b_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.