<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; SED. Поиск строк, содержащих N одинаковых символов]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=32758&amp;type=atom" />
	<updated>2013-12-21T16:02:56Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=32758</id>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383748#p383748" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>echo -e &#039;1\t2\t3\t4\t5\t6\t7\n1\t2\t3\t4\t5\t6\n\t\t\t\t\t\t1\n&#039; | sed &#039;/\(.*[\t].*\)\{6\}/!d; /\(.*[\t].*\)\{7,\}/d;&#039;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>https://linuxforum.ru/profile.php?id=32462</uri>
			</author>
			<updated>2013-12-21T16:02:56Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383748#p383748</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383494#p383494" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>moshell пишет:</cite><blockquote><p><a href="http://xpoint.ru/know-how/Perl/Podderzh">http://xpoint.ru/know-how/Perl/Podderzh</a> … zhivayutsy</p></blockquote></div><p>К сожалению, я&nbsp; пока не изучал Perl, но спасибо за ссылку,</p><div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>cat serv2.txt | sed -e &quot;s/\t/qqq/g&quot; &gt; temp.txt</p><p>заменяет не символ табуляции, а букву t. Даже</p><p>sed -e &quot;s/\x09/qqq/g&quot; &gt; temp.txt</p><p>не хочет заменять tab. Попробую еще сравнить как эти regexp будут работать под win32.</p></blockquote></div><p>При выполнении указанных команд в cmd.exe под win32 sed отрабатывает успешно. По-видимому, это чистой воды косяк wineconsole cmd. Попробую еще с двойным экранированием \\, но я, конечно расстроен, что wine не поддерживает cmd так как надо в win32.</p><p>В win32 соответственно ваш regexp:<br /></p><div class="codebox"><pre><code>/^([^\t]*\t){6}[^\t]*$/</code></pre></div><p>будет выглядеть так:<br /></p><div class="codebox"><pre><code>&quot;/^\([^\t]*\t\)\{6\}[^\t]*$&quot;</code></pre></div><p>т.е. в sed.exe нужно брать regexp в двойные кавычки &quot;&quot; и, кроме этого, экранировать круглые и фигурные скобки с помощью \ (backslash), хотя значение этих костылей Винды для данного Форума не актуально <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /><br />Мне пригодился ваш скрипт вот в таком случае: в строках, содержащих 8 разделителей, заменить 6 разделитель на 2 разделителя (\tab), с целью выравнивания текста относительно строк, содержащих 9 разделителей:<br /></p><div class="codebox"><pre><code>cat.exe &quot;unalign.txt&quot; | sed &quot;/^\([^\t]*\t\)\{8\}[^\t]*$/s/\t/&amp;&amp;/6&quot; &gt; align.txt</code></pre></div><p>Спасибо!</p>]]></content>
			<author>
				<name><![CDATA[spronkin1]]></name>
				<uri>https://linuxforum.ru/profile.php?id=32885</uri>
			</author>
			<updated>2013-12-20T18:50:08Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383494#p383494</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383468#p383468" />
			<content type="html"><![CDATA[<p>а зачем бояться? выполняйте. система (если она не на столько тупа) сама покажет Вам где ошибки</p><br /><p><a href="http://xpoint.ru/know-how/Perl/PodderzhkaUnicode#KakieKodirovkiPodderzhivayutsy">http://xpoint.ru/know-how/Perl/Podderzh … zhivayutsy</a></p>]]></content>
			<author>
				<name><![CDATA[moshell]]></name>
				<uri>https://linuxforum.ru/profile.php?id=20870</uri>
			</author>
			<updated>2013-12-20T16:02:16Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383468#p383468</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383460#p383460" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>moshell пишет:</cite><blockquote><p>regexp Вам уже дан. включите мозг и перефразируйте его на sed. не всю же жизнь зависеть от кого то</p></blockquote></div><p>Спасибо за разъяснения. Буду думать, как это реализовать под win32 - нужно, на работе win32, дома linux, поэтому запускаю из wineconsole cmd, конечно, это изврат, но я боюсь, что если я этот скрипт буду реализовывать в native shell, то могу допустить ошибки в win32, например, в виде одинарных кавычек или отсутствия экранирования символов. По-видимому, у меня какой-то глюкодром с cmd. <br /></p><div class="codebox"><pre><code>cat serv2.txt | sed -e &quot;s/\t/qqq/g&quot; &gt; temp.txt</code></pre></div><p>заменяет не символ табуляции, а букву t. Даже<br /></p><div class="codebox"><pre><code>sed -e &quot;s/\x09/qqq/g&quot; &gt; temp.txt</code></pre></div><p>не хочет заменять tab. Попробую еще сравнить как эти regexp будут работать под win32.</p>]]></content>
			<author>
				<name><![CDATA[spronkin1]]></name>
				<uri>https://linuxforum.ru/profile.php?id=32885</uri>
			</author>
			<updated>2013-12-20T15:12:46Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383460#p383460</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383339#p383339" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>Нужен именно однострочник на sed</p></blockquote></div><p>regexp Вам уже дан. включите мозг и перефразируйте его на sed. не всю же жизнь зависеть от кого то</p><div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>запускается из cmd.</p></blockquote></div><p>вот тут различия будут. в какой ОС вы работаете.</p><div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>Можно в linux, главное, чтобы это был однострочник на sed.</p></blockquote></div><p>это к доктору, скоро он придет.</p><div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>каждая строка начинается с символа tab</p></blockquote></div><p>а я дал универсальный ответ. не за что.</p>]]></content>
			<author>
				<name><![CDATA[moshell]]></name>
				<uri>https://linuxforum.ru/profile.php?id=20870</uri>
			</author>
			<updated>2013-12-19T22:50:49Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383339#p383339</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383333#p383333" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>moshell пишет:</cite><blockquote><p>#!/usr/bin/perl</p><p>while (&lt;&gt;) {<br />&nbsp; &nbsp; chomp;<br />&nbsp; &nbsp; if ( /^([^\t]*\t){6}[^\t]*$/ ) {<br />&nbsp; &nbsp; &nbsp; &nbsp; print &quot;Matched: |$`&lt;$&amp;&gt;$&#039;|\n&quot;;<br />&nbsp; &nbsp; }<br />}</p></blockquote></div><p>Нужен именно однострочник на sed. sed из пакета unixutils запускается из cmd. Можно в linux, главное, чтобы это был однострочник на sed. <br />PS: и еще: каждая строка начинается с символа tab</p>]]></content>
			<author>
				<name><![CDATA[spronkin1]]></name>
				<uri>https://linuxforum.ru/profile.php?id=32885</uri>
			</author>
			<updated>2013-12-19T21:58:10Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383333#p383333</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383325#p383325" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>пока не помогает. Скорее всего, я неправильно написал регулярное выражение.</p></blockquote></div><p>да нет... вроде всё правильно, если «не меньше 6 табов» надо (если надо ровно 6, то сопри регулярку у <strong>moshell</strong>&#039;а)... разве что в bash пытается интерпретировать восклицательный знак, так что надо писать в одинарных кавычках... или эскейпить...</p><div class="quotebox"><cite>spronkin1 пишет:</cite><blockquote><p>PS: просьба не бить сильно руками,  использовал GNU sed version 4.0.7 под win32 из unixutils.</p></blockquote></div><p>а как sed запускается? из bash&#039;а? или из cmd? если второе? если второе, то не знаю как он символы эскейпит... но сдаётся мне, что везде нужен дополнительный бекслеш... а может и два...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2013-12-19T21:21:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383325#p383325</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383219#p383219" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>#!/usr/bin/perl

while (&lt;&gt;) {
    chomp;
    if ( /^([^\t]*\t){6}[^\t]*$/ ) {
        print &quot;Matched: |$`&lt;$&amp;&gt;$&#039;|\n&quot;;
    }
}</code></pre></div><p>### для проверки<br /># сохраните этот кусок кода в какой нибудь файл с именем any_file<br />chmod +x any_file<br />./any_file text_for_parsing<br /># где text_for_parsing - это текст в котором хотите найти эти 6 табуляторов</p>]]></content>
			<author>
				<name><![CDATA[moshell]]></name>
				<uri>https://linuxforum.ru/profile.php?id=20870</uri>
			</author>
			<updated>2013-12-19T17:19:20Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383219#p383219</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383217#p383217" />
			<content type="html"><![CDATA[<p>Я бы определял число одинаковых символов в строке с помощью awk,<br />используя его как этот символ как разделитель. Например, если надо<br />найти число символов &#039;f&#039; в переменной $str, то выражение<br /></p><div class="codebox"><pre><code>`echo $str | awk -F &quot;f&quot; &#039;{printf(&quot;%d&quot;,NF)}&#039;`</code></pre></div><p>вернет число, на 1 больше.</p><p>Пётр.</p>]]></content>
			<author>
				<name><![CDATA[Peter]]></name>
				<uri>https://linuxforum.ru/profile.php?id=5246</uri>
			</author>
			<updated>2013-12-19T17:03:24Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383217#p383217</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[SED. Поиск строк, содержащих N одинаковых символов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=383203#p383203" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />Столкнулся со следующей проблемой:<br />Есть текст, разделенный символами табуляции. Количество символов табуляции в разных строках варьируется.<br />Как с помощью адресации sed можно отобрать строки, содержащие только 6 символов табуляции? Следует учесть, что символы tab не обязательно идут друг за другом подряд, т.е. между ними может быть текст.</p><p>Пробовал использовать такой вариант:<br /></p><div class="codebox"><pre><code>sed -e &quot;/\(\t[^\t]*\)\{6\}/!d&quot;</code></pre></div><p>пока не помогает. Скорее всего, я неправильно написал регулярное выражение.<br />буду дальше думать<br />PS: просьба не бить сильно руками,&nbsp; использовал GNU sed version 4.0.7 под win32 из unixutils.</p>]]></content>
			<author>
				<name><![CDATA[spronkin1]]></name>
				<uri>https://linuxforum.ru/profile.php?id=32885</uri>
			</author>
			<updated>2013-12-19T16:30:22Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=383203#p383203</id>
		</entry>
</feed>
