Bash
使用 sed 在每一行的開頭添加一個 URL
我有某個網頁的 URL(見下文),其中列出了許多不同版本的軟體包。
URL=http://ftp.gnu.org/gnu/wget/
下面的單行程式碼讓我從 HTML 中獲取最新版本的 tar 球及其簽名文件。
wget -qO- http://ftp.gnu.org/gnu/wget/ | grep tar | cut -d\" -f6 | tail -n4 | grep gz
可能不是最短最有效的一個班輪,但是,嘿,我正在學習,我願意接受回饋。上面的結果是這樣的:
wget-1.15.tar.gz wget-1.15.tar.gz.sig
現在,下一個合乎邏輯的步驟(至少對我而言)是將上面的輸出通過管道 傳輸到
sed
每$URL
行的前面,以便輸出如下所示:http://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz http://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz.sig
然後我想將其重新輸入
wget
以下載文件。問題是這樣的:如何使用 bash 將變數的值附加
$URL
到每行輸出的前面sed
?我嘗試了以下方法:sed "s/^/$URL/"
但這只會給我錯誤:
sed: -e expression #1, char 11: unknown option to `s'
我也知道基本概念很好,因為當我使用以下時,我得到了很好的結果……
VAR="Gorauskas, " echo "Jonas" | sed "s/^/$VAR/"
所以,我的猜測是我需要以某種方式轉義變數
/
中的所有字元$URL
……我在正確的軌道上嗎?
使用不包含變數中任何字元的不同分隔符。
例如,
sed "s|^|$URL|"
(如果您
/
用作分隔符並且模式或替換也包含/
,那麼您需要轉義這些。)
你到現在所做的可以被一個
awk
電話代替:wget ... | awk -F\" '$6 ~ "gz$" { lastline=thisline; thisline=$6;}; '\ 'END {print lastline; print thisline;}'
當然,awk 也可以添加 URL:
awk -F\" -v baseurl="http://ftp.gnu.org/gnu/wget/" \ '$6 ~ "gz" { lastline=thisline; thisline=$6;}; '\ 'END {print baseurl lastline; print baseurl thisline;}'