Да, на самом деле все будет хорошо. Grep
, и большинство команд Unix работают по потокам по одной строке за раз. Каждая строка, которая выходит из хвоста, будет анализироваться и передаваться, если она соответствует.
Механизм regex Tcl не поддерживает lookbehinds (которые ужасно дороги), поэтому он не может разобрать выражение.
Если вы знаете, что есть запятая, вы можете сделать то же самое проще by
string range $line [string last , $line]+1 end
или
regexp {[^,]+$} $line var
или
regexp {\w+=\w+$} $line var
Если может не быть запятой, и вы хотите получить строку, только если является запятой, используйте
if {[set idx [string last , $line]] >= 0} {
set var [string range $line $idx+1 end]
}
или
regexp {,([^,]+)$} $line -> var
Здесь вы получаете два результата: полное совпадение переходит в переменную ->
, и захваченный текст переходит в переменная var
. Ни одно из них не изменится, если нет совпадения.
lindex [split $line ","] end
может быть другой альтернативой в зависимости от данных OP. – Jerry 16 July 2018 в 05:40