我目前正在撰寫一個 sed 腳本,在該腳本中我必須按照某種列印方式列印網站的 30 個標題。我有以下錯誤“sed:檔案 news.sed 第 1 行:'s' 的未知選項。這是我的代碼:
curl -sL news.ycombinator.com |
sed -nE '/\n/!s/><a[^>]*>[^<]*</\n&\n/g;/^/P;D' |
sed -E 's/><a href="([^"]*)" >([^<]*)</**\2**\n\1/'
你知道我該如何解決嗎?順便說一句,我只能使用 sed 來解決這個問題,而不能使用 html 決議器。
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
cat <<\! > news.sed
/\n/!s/class="title"><a[^>]*>[^<]*</\n&\n/g
/^class="title"/{
h
x
s/^class="title"><a href="([^"]*)" hljs-string">"[^>]*>([^<]*)<.*/**\2**\n\1/p
x
}
D
!
curl -sL news.ycombinator.com | sed -Enf news.sed
這將 2 個 sed 呼叫組合到一個 sed 腳本中,并使用該-f選項應用它。
注意這是特定于 GNU sed 的。它還使用了一個鮮為人知的習慣用法,它使用全域替換來處理每一行,將換行符插入到模式空間中。該D命令被呼叫并洗掉直到并包括第一個換行符,但在模式空間為空之前不會完成當前的 sed 回圈(這基本上通過插入的每個換行符來削減模式空間,如果行首匹配另一個正則運算式,則應用括號內的運算式)。括號中的運算式。在保持空間中復制模式空間,交換到保持空間,格式化保持空間的開頭以提供 2 個格式化的行,恢復到模式空間并切入下一個換行符,然后重復。
這是一個非常粗略和現成的解決方案,可能無法滿足所有可以通過 curl 命令回傳的 HTML。
uj5u.com熱心網友回復:
我有以下錯誤“sed:檔案 news.sed 第 1 行:'s' 的未知選項。
在第三個腳本行的末尾(至少)有一個回車符,因為它緊跟在s/…/…/命令之后,被解釋為它的一個選項。您可以消除腳本檔案中的 CR,例如使用sed -i 's/\r//' news.sed.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/359457.html
下一篇:比較值的簡單bash程式
