С Perl регулярных выражений:
$ echo 'this is a long string that needs to be shortened' \
| perl -pe 's/^(.{15}).+/$1.../'
this is a long ...
Самый простой способ думать о регулярных выражений, чтобы считать это модель, которая должна быть согласована. В этом случае шаблон начинается с начала строки:
^
(Обратите внимание, что /
произвольный разделитель Другие символы могут быть использованы вместо этого.). В ^
является символом, который представляет собой начало строки в регулярное выражение. Далее регулярное выражение соответствует любому символу:
^.
.
является регулярным выражением символа для любого символа. Но мы хотим соответствовать первым 15 символам:
^.{15}
Существует несколько различных модификаторов, которые представляют собой повторение. Наиболее распространенным является *
, что означает 0 или более. A +
указывает 1 или больше. {15}
, очевидно, представляет ровно 15. (The {...}
нотации является более общим Так *
может быть написано {0,}
и +
такими же, как {1,}
.). Теперь нам нужно захватить первые 15 символов, так что мы можем использовать их позже:
^(.{15})
Все между (
и )
захватывается и помещается в специальную переменную под названием $1
(или иногда \1
). Второй захваченный фрагмент будет помещен в $2
и так далее.И, наконец, вы должны соответствовать до конца строки, так что вы можете бросить эту часть прочь:
^(.{15}).+
Первоначально я использовал *
, но, как другой человек указал, что, вероятно, не то, что хотел, когда строка ровно 15 символов:
$ echo 'this is a long ' \
| perl -pe 's/^(.{15}).*/$1.../'
this is a long ...
Используя +
означает образец не будет соответствовать, если не 16-й символ для замены.
Вторая половина утверждения, что печатается:
$1...
$1
переменная, которую мы поймали раньше, используется и точки являются дословным .
s на этой стороне замещения. Как правило, все, кроме переменных регулярного выражения, является буквальным в правой части оператора замещения.
Возможно, должно быть это. + Вместо. *, Так что оно не соответствует строке ровно 15 символов. – 2008-12-09 21:45:07