使用sed的這種方式是不正確的,的sed不反對pattern space
重新匹配第二個地址(簡單地說,只是當前行,如果你不堅持hold space
,然後去pattern space
),其匹配第一個地址。
第一個地址是<item
和所述第二地址與<item ..
啓動。所以即使你逃過了第二個地址中的特殊字符,你也永遠不會匹配第二個地址。
使用行號來選擇內容:
$ wget -qO- https://nvd.nist.gov/download/nvd-rss-analyzed.xml > result
$ firstline="<item rdf:about=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1977\""
$ echo $firstline
<item rdf:about="https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1977"
$ start=$(grep -n "<item " result | head -n1 | awk -F\: '{print $1}')
$ end=$(grep -n "$(echo $firstline | sed 's/\//\\&/g')" result | awk -F\: '{print $1}')
echo $start $end
169 187
$ sed -n "$start,${end}p" result > output
使用兩個不會忽略的另一種方法:
$ wget -qO- https://nvd.nist.gov/download/nvd-rss-analyzed.xml > result
$ firstline="<item rdf:about=\"https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1977\""
$ firstline=$(echo $firstline | sed 's/\//\\&/g')
$ cat result | sed -n "/<item /,\${p; /$firstline/q;}"
<item rdf:about="https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-3701">
...
<item rdf:about="https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1977">
使用'的sed -n 「/ <項/,/ $ FIRSTLINE/P」' – anubhava
時我執行'FIRSTLINE = <項的rdf:about = 「https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-1977」'時,收到錯誤消息「-ksh:項目:無法打開[沒有這樣的文件或目錄]「。 'bash'有什麼不同?祝你們好運。 – shellter
我也注意到,我得到以下錯誤 sed:-e表達式#1,字符35:未知的命令:'/' – animoe