我對後顯示寄託都「(」正則表達式:桑達相匹配的第一個重複字符的
echo "apples (orange) (plum)" | sed -re 's/^.+\(//'
輸出:plum)
預期輸出:orange) (plum)
我怎麼能趕上第一發生的字符而不是最後一個?
我對後顯示寄託都「(」正則表達式:桑達相匹配的第一個重複字符的
echo "apples (orange) (plum)" | sed -re 's/^.+\(//'
輸出:plum)
預期輸出:orange) (plum)
我怎麼能趕上第一發生的字符而不是最後一個?
echo "apples (orange) (plum)" | sed -re 's/^[^(]+\(//'
。匹配任何字符,因此sed觀看行中的最後一個括號。 因此.
墊片(
和^[^(]+\(
墊片apples (orange) (
。 因此,您需要使用[^(]*
來完全不符合您所建議的任何(
。
不能。 。*和。+總是貪婪。還有其他方法可以做到這一點。
刪除所有領先的非(
的
$ sed 's/[^(]*(//' <<<'apples (orange) (plum)'
orange) (plum)
或者幾乎等同,而不是真正的改善將節省使用一組的第二部分。
$ sed 's/[^(]*(\(.*\)$/\1/' <<<'apples (orange) (plum)'
orange) (plum)
這對我來說:)謝謝你的解釋 – Gil