簡體   English   中英

將參數傳遞給sed命令

[英]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.

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