[英]pipe output of grep as an argument to a bash script
script.sh
將兩個文件作為 arguments,並調用 python 腳本打開它們並對這些文件進行進一步處理:
script.sh file1.txt file2.txt
我想從 file1.txt 中刪除所有以 # 開頭的行。
grep -v '^#' file1.txt
我嘗試了以下方法,但失敗了:
script.sh $(grep -v '^#' file1.txt) file2.txt
如何將 pipe 的 grep 的 output 作為 script.sh 的第一個文件參數?
script.sh <(grep -v '^#' file1.txt) file2.txt
您擁有的命令替換$()
將從 grep 命令逐字插入 output 作為 arguments 到script.sh
。 相反,引用 bash 手冊頁:
進程替換允許使用文件名引用進程的輸入或 output。 它采用 <(list) 或 >(list) 的形式。 進程列表異步運行,其輸入或 output 顯示為文件名。 作為擴展的結果,此文件名作為參數傳遞給當前命令。
和
如果使用 <(list) 形式,則應讀取作為參數傳遞的文件以獲得列表的 output。
因此,我的理解是,當您使用$()
時,您的 grep 命令的 output 將替換為最終語句,結果如下:
script.sh contents of file1 without comments \n oops newline etc file2.txt
但是,當您使用<()
時,將運行 grep 命令,並且 output 進入名為 pipe 或臨時文件或其他等效文件的名稱中,因此將“你的文件”的名稱替換為的線
script.sh /dev/fd/temp_thing_containing_grep_results file2.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.