2013-08-05 3 views
1

У меня есть строка простого текста, которую мне нужно обернуть в '<' и '/>'.Добавление символа в начало * и * конец каждой строки

Так что я могу сделать это perl -pe 's/^/</' myfile, а затем сделать это снова подставляя ^ с $

Есть в любом случае сделать это с помощью одной строки кода вместо переборе дважды над файлом?

Это может быть сделано лучше в sed или awk? Как ?

+0

Все ответы были хорошими. cjm получил xtra точки для скорости :) – eramm

ответ

3
perl -pe 's/^/</; s!$!/>!' myfile 

Вы можете использовать любое количество операторов; просто отделите их точкой с запятой. И используйте альтернативные разделители, когда ваше регулярное выражение содержит / для ясности.

+1

PBP рекомендует использовать '{}' для ясности: 'perl -pe 's {^} {<}; s{$}{/>}' myfile' – shawnhcorey

0
perl -pe 's/^.*$/<$0\/>/mg' myfile 

EDIT: выше найдено неправильно — см замечания @cjm ниже.

+0

Два простых регулярных выражения часто бывают быстрее, чем еще один сложный (в этом случае нет необходимости записывать что-либо). Кроме того, нет необходимости в модификаторе '/ g'; вы уже обрабатываете одну строку за раз. Это просто замедляет процесс поиска другого матча. – cjm

+0

Гораздо более серьезная проблема, которую я не заметил вначале, состоит в том, что '$ 0' - это не текст, соответствующий регулярному выражению. Это имя программы ('-e' в этом случае). Вы имели в виду '$ &'. – cjm

+0

@cjm - Ах, спасибо за исправления. Я оставлю свой ответ, поскольку обнаружил, что «$ 0» удивительно, а другие тоже могут. Но +1 к вам. –

2

еще один способ (но быстрее :-))

perl -i -ne 'chomp;print "<$_>\n"' myfile