Bash

使用 sed 在每一行的開頭添加一個 URL

  • September 9, 2021

我有某個網頁的 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;}'

引用自:https://unix.stackexchange.com/questions/116657