[英]Pass parameter into sed command
我正在嘗試編寫一個bash腳本,用戶可以在其中傳遞一個正則表達式作為參數。 因此,例如,您以這種方式運行程序。
./clean_txt.sh s/.*\(my_choices.*gz\)/\1p
在程序中,我以這種方式使用該參數。
ls /home/user/ | sed -n '$1' > cleaned_file.txt
echo "sed -n '$1'"
在我的回聲中,我看到啟動程序時傳遞的正則表達式。 但是我的cleaned_file.txt為空。 唯一可行的方法是,如果我將正則表達式硬編碼到程序本身中,但是這違背了我試圖做的目的。
關於如何將參數傳遞給sed命令的任何想法嗎?
問題是您的變量沒有被擴展。 您需要將其用雙引號引起來(這就是您已經在echo
執行的操作):
ls /home/user/ | sed -n "$1" > cleaned_file.txt
請注意,不需要ls
:
files=( /home/user/* )
sed -n "$1" <<<"${files[@]}" > cleaned_file.txt
會做同樣的事情。 這使用一個glob創建一個包含所有文件名的數組,該文件名用作sed的輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.