<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Perlover&#039;s Blog &#187; Regexp</title>
	<atom:link href="http://blog.perlover.com/tag/regexp/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perlover.com</link>
	<description>Blog about Unix, Perl, Firefox, JavaScript and other internet technologies</description>
	<lastBuildDate>Fri, 20 Jan 2012 15:23:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>sed &#8212; некоторые тонкости regexp</title>
		<link>http://blog.perlover.com/2009/10/29/sed-regexp/</link>
		<comments>http://blog.perlover.com/2009/10/29/sed-regexp/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 06:08:41 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Regexp]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=115</guid>
		<description><![CDATA[До недавнего времени сколько бы я не делал попыток написать для sed хоть мало мальское регулярное выражение, оно у меня не работало ...]]></description>
			<content:encoded><![CDATA[<p>До недавнего времени сколько бы я не делал попыток написать для sed хоть мало мальское регулярное выражение, оно у меня не работало. Я не мог понять в чем дело, ведь там синтаксис должен быть практически такой же, как в perl. Но для меня Sed оставался странной лошадкой, которую хотелось бы обуздать, но не получалось.</p>
<p>И вот, наконец, сегодня я прочел <a href="http://www.gnu.org/software/sed/manual/sed.html">грамотную доку</a>, а также в другом месте нашел объяснение моим проблемам. Оказывается, в sed есть очень мелкие, но важные отличия, поняв которые, вы сможете писать sed команды легко.</p>
<p>Итак, оказывается, по историческим причинам, чтобы не нарушать работу старых sed команд, в sed группировка (&#8216;(&#8216;, &#8216;)&#8217;) и некоторые другие спец. символы (&#8216;+&#8217; , &#8216;?&#8217;) были заменены на символы со слешем. Вот эти отличия:</p>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tbody>
<tr>
<th width="33%">В языке Perl</th>
<th width="33%">В sed редакторе</th>
<th width="33%">Пояснение</th>
</tr>
<tr>
<td width="33%">(&#8230;)</td>
<td width="33%">\(&#8230;\)</td>
<td width="33%">Группировка</td>
</tr>
<tr>
<td width="33%">{X,Y}</td>
<td width="33%">\{X,Y\}</td>
<td width="33%">Заданный множитель</td>
</tr>
<tr>
<td width="33%">+</td>
<td width="33%">\+</td>
<td width="33%">Повторитель &#8212; один и более раз</td>
</tr>
<tr>
<td width="33%">?</td>
<td width="33%">\?</td>
<td width="33%">Повторитель &#8212; один или ноль раз</td>
</tr>
<tr>
<td width="33%">\bfoo\b</td>
<td width="33%">\&lt;foo\&gt;</td>
<td width="33%">поиск &#8216;foo&#8217; с границами слова</td>
</tr>
<tr>
<td width="33%">$1, $2</td>
<td width="33%">\1, \2</td>
<td width="33%">Подмена на группу</td>
</tr>
</tbody>
</table>
<p>Самое главное, на чем я спотыкался всегда &#8212; я никак не мог додуматься, что &#8216;\&#8217; должен ставиться перед &#8216;(&#8216;, или перед &#8216;?&#8217; и &#8216;+&#8217; символами, например. Я видел иногда эти слеши в примерах, но я думал, что эти слеши относились к shell, но оказалось, что это тонкость sed-а.</p>
<p>P.S. Возникает вопрос, а как же тогда заменять сами символы: &#171;?+{}()&#187; в sed? А оказывается, их просто не надо ескейпить символом &#8216;\&#8217;. Получается как бы наоборот &#8212; эти символы сами по себе не ескейпяться, а когда нужно их специальное назначение, то перед ними ставим &#8216;\&#8217;. Типа все с ног на голову, если сравнивать с perl.</p>
<p><strong><span style="color: #ff0000;">Чуть позже я выяснил</span></strong>, что <strong>у sed есть ключик запуска &#8216;-r&#8217;</strong>, который, собственно, <strong><span style="color: #ff0000;">переключает sed в тот режим, который работает со спецсимволами уже без слеша</span></strong> (то есть так, как привыкли perl программисты). Поэтому, есть второй вариант: просто добавить ключ -r в sed запуска, и усё будет работать по привычному <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/10/29/sed-regexp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

