이 sed 편집으로 인해 oneliner가 중단되는 이유는 무엇입니까?

이 sed 편집으로 인해 oneliner가 중단되는 이유는 무엇입니까?

sed를 편집하는 데 문제가 있습니다. 내가 실행할 때 :

close=`curl 'https://finance.yahoo.com/quote/INTC?p=INTC&.tsrc=fin-srch'|html2text|sed -n '/Add to watchlist/,$p'|sed -n '/At close\:/q;p'|head -n-1|tail -n+3`; echo $close

나는 얻다:45.60+0.21 (+0.46%)

+그러나 추가 sed 명령을 추가하면 -다음과 같이 첫 번째 또는 이전 부동 소수점을 제외한 모든 것이 제거됩니다.

close=`curl 'https://finance.yahoo.com/quote/INTC?p=INTC&.tsrc=fin-srch'|html2text|sed -n '/Add to watchlist/,$p'|sed -n '/At close\:/q;p'|head -n-1|tail -n+3|sed -n '/^\([0-9]*\.[0-9]*\)[+-].*$/\1/'`; echo $close

내 출력(에코)이 비어 있습니다. 내가 놓친 아이디어가 있습니까?

답변1

전체 파이프라인을 단순화할 수 있습니다.

curl ... |
    html2text|
    sed -n '/Add to watchlist/,/At close/s/^\([0-9][0-9]*\.[0-9][0-9]*\)[-+].*/\1/p'

GNU가 있는 경우 sed더 강력한 RE 엔진을 사용하여 표현식을 약간 단순화할 수 있습니다.

sed -rn '/Add to watchlist/,/At close/s/^([0-9]+\.[0-9]+)[-+].*/\1/p'

sed명령은 행만 봅니다.포함하고 사이에" Add to watchlist" 그리고" At close". 해당 범위 내에서 하나 이상의 숫자, 점 및 뒤에 +or 가 오는 하나 이상의 숫자를 포함하는 문자열을 찾습니다 -.

관련 정보