<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; sed, регулярные выражения]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8716</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8716&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «sed, регулярные выражения».]]></description>
		<lastBuildDate>Sun, 11 May 2014 14:24:29 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82879#p82879</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>не в самой Unix, а в обычно используемых в ней командных оболочках</p></blockquote></div><p>Да. Так будет точнее. </p><div class="quotebox"><blockquote><p>Как я понимаю, как раз вторая строка преобразуется к первой перед передачей awk.</p></blockquote></div><p>Скорее наоборот. &quot;Строка в кавычках&quot; интерполируется (подстановка и раскрытие переменных) и потом передается в awk. &#039;Строка в апострофах&#039; передается на вход awk без изменений.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 11 May 2014 14:24:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82879#p82879</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82836#p82836</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>В unix ограничителями строк являтся либо кавычки, либо апострофы.</p></blockquote></div><p>Вероятно, если подойти более формально, то не в самой Unix, а в обычно используемых в ней командных оболочках.<br /></p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Поэтому следующие строки обе корректны и передаются в awk полностью как текст программы. Главное отличие заключается в том, что в первом случае строка интерпретируется, во втором - нет и передается как есть, без изменений. <br /></p><div class="codebox"><pre><code>awk &quot;{ print }&quot; FILENAME
awk &#039;{ print }&#039; FILENAME</code></pre></div></blockquote></div><p>Как я понимаю, как раз вторая строка преобразуется к первой перед передачей awk.<br />Вот что происходит с апострофами в <a href="http://zsh-nt.sourceforge.net/">WinZsh</a> при передаче их вызываемой программе:<br /></p><div class="codebox"><pre><code># cmd /c echo &#039;123&#039;
123
# cmd /c echo &#039;1 2 3&#039;
&quot;1 2 3&quot;
# cmd /c echo 1 &quot; 2 &quot; 3
1 &quot; 2 &quot; 3
# cmd /c echo &#039;1&quot;2&quot;3&#039;
1\&quot;2\&quot;3
# cmd /c echo &#039; 1&quot;2&quot;3 &#039;
&quot; 1\&quot;2\&quot;3 &quot;
#</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sat, 10 May 2014 09:46:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82836#p82836</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82826#p82826</link>
			<description><![CDATA[<p>Ответ - &quot;нет&quot;. </p><p>В unix ограничителями строк являтся либо кавычки, либо апострофы. Поэтому следующие строки обе корректны и передаются в awk полностью как текст программы. Главное отличие заключается в том, что в первом случае строка интерпретируется, во втором - нет и передается как есть, без изменений. <br /></p><div class="codebox"><pre><code>
awk &quot;{ print }&quot; FILENAME
awk &#039;{ print }&#039; FILENAME
</code></pre></div><p>В dos только кавычки являются ограничителями строк. В случае их отсутствия предполагается, что первый аргумент является программой, а остаток командной строки списком файлов. Это легко проверить, например:<br /></p><div class="codebox"><pre><code>
awk /./{print} c:\Windows\System32\drivers\etc\hosts
awk /./ {print} c:\Windows\System32\drivers\etc\hosts
</code></pre></div><p>Первая команда корректно выведет все непустые строки заданного файла. Вторая - аварийно завершится сообщив о невозможности чтения файла {print}. Что весьма логично.</p><p>В простых случаях можно обойтись решением, удалив все пробелы в awk-команде (как в примерах выше). Иногда можно передать awk-команды через конвейер:<br /></p><div class="codebox"><pre><code>
echo /./ { print } | awk -f - c:\Windows\System32\drivers\etc\hosts
</code></pre></div><p>Но этот способ не сработает если требуется обработать данные из конвейера же.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 09 May 2014 18:21:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82826#p82826</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82816#p82816</link>
			<description><![CDATA[<p>Да, все верно, такой способ отрабатывает. Собственно, я его уже давно использую (с того момента, когда начал использовать пакет GNUWIN32).</p><p>Мой вопрос был в другом: есть ли способ использовать именно одиночные кавычки в качестве ограничителей макроса, а двойные внутри макроса в качестве определителя строк и выражений?</p>]]></description>
			<author><![CDATA[null@example.com (hvs)]]></author>
			<pubDate>Fri, 09 May 2014 10:34:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82816#p82816</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82815#p82815</link>
			<description><![CDATA[<div class="quotebox"><cite>hvs пишет:</cite><blockquote><div class="quotebox"><blockquote><p>Не совсем понятно, о каком ограничении речь.</p></blockquote></div><p>Вот об этом: &lt;…&gt;</p></blockquote></div><p>Т.е. о котором я и ответил в #18.<br />Должно работать вот так:<br /></p><div class="codebox"><pre><code>gawk &quot;{if (/^\t/) {printf \&quot;%s\&quot;, $NF} else {printf \&quot;\n\&quot;$0\&quot;\n\&quot;}}&quot; | sed &quot;/^$/d&quot;</code></pre></div><p>Насчёт одиночных кавычек я думаю, что на самом деле AWK (и другие программы под UNIX) их не понимают — их обрабатывает командная оболочка прежде чем отдать командную строку запускаемой программе (так же как CMD предварительно обрабатывает символы «^»), преобразуя эту строку к чему-то подобному, что я показал выше.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Fri, 09 May 2014 10:01:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82815#p82815</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82812#p82812</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Не совсем понятно, о каком ограничении речь.</p></blockquote></div><p>Вот об этом:<br /></p><div class="codebox"><pre><code>
C:\bin\tools&gt;awk &#039;{if (/^\t/) {printf &quot;%s&quot;, $NF} else {printf &quot;\n&quot;$0&quot;\n&quot;}}&#039; | sed &quot;/^$/d&quot;
awk: &#039;{if
awk: ^ invalid char &#039;&#039;&#039; in expression
</code></pre></div><p>Кстати, с GAWK тоже самое:<br /></p><div class="codebox"><pre><code>
C:\bin\tools&gt;gawk &#039;{if (/^\t/) {printf &quot;%s&quot;, $NF} else {printf &quot;\n&quot;$0&quot;\n&quot;}}&#039; | sed &quot;/^$/d&quot;
gawk: &#039;{if
gawk: ^ invalid char &#039;&#039;&#039; in expression
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (hvs)]]></author>
			<pubDate>Fri, 09 May 2014 08:42:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82812#p82812</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82805#p82805</link>
			<description><![CDATA[<div class="quotebox"><cite>hvs пишет:</cite><blockquote><p>PS<br />Если кто-нибудь из уважаемого &quot;ALL&quot; знает способ обойти указанные ограничения CMD - буду премного благодарен.</p></blockquote></div><p>Не совсем понятно, о каком ограничении речь. Но если это то, о чём я подумал, то, не вдаваясь в тонкости истолкования CMD своих спецсимволов попадающих и не попадаюших между кавычек, — заключать AWK-код в двойные кавычки, а содержащиеся в нём самом кавычки предварять «\». По крайней мере для GAWK.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Fri, 09 May 2014 03:26:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82805#p82805</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=82702#p82702</link>
			<description><![CDATA[<div class="quotebox"><cite>DnsIs пишет:</cite><blockquote><p>На awk получилось на порядок быстрее.<br /></p><div class="codebox"><pre><code>awk &#039;{if (/^\t/) {printf &quot;%s&quot;, $NF} else {printf &quot;\n&quot;$0&quot;\n&quot;}}&#039; | sed &quot;/^$/d&quot;</code></pre></div><p>Ну слава богу, сам себе помог.<br />Спасибо всем.</p></blockquote></div><p>Маленькое дополнение.<br />в стандартном CMD &quot;фокус&quot; с одиночными кавычками не проходит, к сожалению приходится использовать двойные: AWK (GAWK, NAWK) из пакета GNUWIN32 не воспринимает их в качестве определителя строки макроса. Аналогичная ситуация (в большинстве случаев) с другими утилитами по обработке текста из данного пакета.</p><p>Но все меняется, если данная конструкция запускается из PoSH. Все великолепно работает.</p><p>Резюме: <br />Связка GNUIWWIN32 + PoSH = гармония UNIX и Windows. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>PS<br />Если кто-нибудь из уважаемого &quot;ALL&quot; знает способ обойти указанные ограничения CMD - буду премного благодарен.</p>]]></description>
			<author><![CDATA[null@example.com (hvs)]]></author>
			<pubDate>Tue, 06 May 2014 14:56:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=82702#p82702</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78431#p78431</link>
			<description><![CDATA[<p>Я как всегда олень. Rumata, вы должны простить меня. Данные исходные в таком вот виде (это лог tcpdump):</p><div class="codebox"><pre><code>03:30:44.617974 0us Beacon (GK Nauka) [1.0* 2.0* 5.5* 11.0* 9.0* 18.0* 36.0* 54.0* Mbit] ESS CH: 10, PRIVACY
    0x0000:  a1f2 5428 9e03 0000 6400 1104 0008 474b  ..T(....d.....GK
    0x0010:  204e 6175 6b61 0108 8284 8b96 92a4 c8ec  .Nauka..........
    0x0020:  0301 0a32 048c 98b0 e007 0654 5720 010d  ...2.......TW...
    0x0030:  1433 0820 0102 0304 0506 0733 0821 0506  .3.........3.!..
    0x0040:  0708 090a 0bdd 2700 50f2 0410 4a00 0110  ......&#039;.P...J...
    0x0050:  1044 0001 0210 4700 1028 8028 8028 8018  .D....G..(.(.(..
    0x0060:  80a8 80b0 b2dc 5cc6 e210 3c00 0101 0506  ......\...&lt;.....
    0x0070:  0001 0044 b010 2a01 042d 1aee 1117 ffff  ...D..*..-......
    0x0080:  0000 0100 0000 0000 0000 0000 0000 000c  ................
    0x0090:  0000 0000 003d 160a 0704 0000 0000 0000  .....=..........
    0x00a0:  0000 0000 0000 0000 0000 0000 0030 1801  .............0..
    0x00b0:  0000 0fac 0202 0000 0fac 0200 0fac 0401  ................
    0x00c0:  0000 0fac 0200 00dd 1800 50f2 0201 0100  ..........P.....
    0x00d0:  0003 a400 0027 a400 0042 435e 0062 322f  .....&#039;...BC^.b2/
    0x00e0:  000b 0501 0006 127a dd07 000c 4304 0000  .......z....C...
    0x00f0:  00                                       .
03:30:47.906724 0us Probe Request (Omentum) [1.0* 2.0* 5.5* 11.0* 6.0 12.0 24.0 36.0 Mbit]
    0x0000:  0007 4f6d 656e 7475 6d01 0882 848b 960c  ..Omentum.......
    0x0010:  1830 4832 0412 2460 6c                   .0H2..$`l
03:30:47.906726 0us Probe Request () [1.0* 2.0* 5.5* 11.0* 6.0 12.0 24.0 36.0 Mbit]
    0x0000:  0000 0108 8284 8b96 0c18 3048 3204 1224  ..........0H2..$
    0x0010:  606c                                     `l
03:30:50.463863 WEP Encrypted 0us Data IV:723616 Pad 20 KeyID 1
    0x0000:  1636 7260 2700 0000 aaaa 0300 0000 0800  .6r`&#039;...........
    0x0010:  45c0 001c 5430 0000 0102 6141 c0a8 6305  E...T0....aA..c.
    0x0020:  e000 0001 1164 ee9b 0000 0000 0000 0000  .....d..........
    0x0030:  0000 0000 0000 0000 0000 0000 0000 3eb5  ..............&gt;.
    0x0040:  934e 5323 af96 031d 44cf                 .NS#....D.
</code></pre></div><p>PS перед <strong>0x0000</strong> стоит табуляция.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sun, 22 Dec 2013 21:37:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78431#p78431</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78430#p78430</link>
			<description><![CDATA[<p>На awk получилось на порядок быстрее.<br /></p><div class="codebox"><pre><code>awk &#039;{if (/^\t/) {printf &quot;%s&quot;, $NF} else {printf &quot;\n&quot;$0&quot;\n&quot;}}&#039; | sed &quot;/^$/d&quot;</code></pre></div><p>Ну слава богу, сам себе помог.<br />Спасибо всем.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sun, 22 Dec 2013 21:30:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78430#p78430</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78429#p78429</link>
			<description><![CDATA[<p>Изменил акценты на выборку требуемых данных: <br />1. во всех строках кроме первой удалить начало строки, заканчивающееся двумя пробелами<br />2. все строки начиная со второй склеить в одну<br /></p><div class="codebox"><pre><code>
sed -r -e &#039;2,${s/.*  (.*)$/\1/}&#039; FILENAME | sed -e &#039;2,${:a; /$/N; s/\n//; ta}&#039;
</code></pre></div><p>вывести первую строку как есть, во всех остальных строках удалить начало строки, заканчивающееся двумя пробелами<br /></p><div class="codebox"><pre><code>
perl -ne &#039;BEGIN { $_ = &lt;&gt;; print; }; s/.*  (.*?)\s*$/$1/; print&#039; FILENAME
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 22 Dec 2013 20:49:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78429#p78429</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78428#p78428</link>
			<description><![CDATA[<p>Очень долго пашет, но таки работает.<br /></p><div class="codebox"><pre><code>sed &quot;:start; s/\(.*\)[[:space:]]0x[a-h0-9]\{4\}:.*\s\s\(.\{,16\}\)$/\1\2/; tnext; b; :next; N; /0x[a-h0-9]\{4\}:/s/\n//; bstart&quot;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sun, 22 Dec 2013 18:57:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78428#p78428</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78392#p78392</link>
			<description><![CDATA[<p>Всех с наступащим НГ.</p><p>Sed меня не отпускает помогите пожалуйста. Есть файл:<br /></p><div class="codebox"><pre><code>03:30:44.617974 0us Beacon (GK Nauka) [1.0* 2.0* 5.5* 11.0* 9.0* 18.0* 36.0* 54.0* Mbit] ESS CH: 10, PRIVACY
    0x0000:  a1f2 5428 9e03 0000 6400 1104 0008 474b  ..T(....d.....GK
    0x0010:  204e 6175 6b61 0108 8284 8b96 92a4 c8ec  .Nauka..........
    0x0020:  0301 0a32 048c 98b0 e007 0654 5720 010d  ...2.......TW...
    0x0030:  1433 0820 0102 0304 0506 0733 0821 0506  .3.........3.!..
    0x0040:  0708 090a 0bdd 2700 50f2 0410 4a00 0110  ......&#039;.P...J...
    0x0050:  1044 0001 0210 4700 1028 8028 8028 8018  0D....G..(.(.(..
    0x0060:  80a8 80b0 b2dc 5cc6 e210 3c00 0101 0506  ......\...&lt;.....
    0x0070:  0001 0044 b010 2a01 042d 1aee 1117 ffff  ...D..*..-......
    0x0080:  0000 0100 0000 0000 0000 0000 0000 000c  ................
    0x0090:  0000 0000 003d 160a 0704 0000 0000 0000  .....=..........
    0x00a0:  0000 0000 0000 0000 0000 0000 0030 1801  .............0..
    0x00b0:  0000 0fac 0202 0000 0fac 0200 0fac 0401  ................
    0x00c0:  0000 0fac 0200 00dd 1800 50f2 0201 0100  ..........P.....
    0x00d0:  0003 a400 0027 a400 0042 435e 0062 322f  .....&#039;...BC^.b2/
    0x00e0:  000b 0501 0006 127a dd07 000c 4304 0000  .......z....C...
    0x00f0:  00                                       .
</code></pre></div><p> Хочется видеть его в таком виде:</p><div class="codebox"><pre><code>03:30:44.617974 0us Beacon (GK Nauka) [1.0* 2.0* 5.5* 11.0* 9.0* 18.0* 36.0* 54.0* Mbit] ESS CH: 10, PRIVACY
..T(....d.....GK.Nauka.............2.......TW....3.........3.!........&#039;.P...J...0D....G..(.(.(........\...&lt;........D..*..-...........................=.......................0............................P..........&#039;...BC^.b2/.......z....C....</code></pre></div><p>Удалить шестнадцетиричные значения</p><div class="codebox"><pre><code>    xXxxxx:  xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx  </code></pre></div><p> и главное переносы между строк только лишь в области данных, но не после заголовков (в данном примере должен остаться только один символ новой строки после PRIVACY)<br />В наличии Linux. Удаление лишнего реализовать можно так:</p><div class="codebox"><pre><code>sed -e &#039;s/\t.*\(.\{16\}\)$/\1/&#039;</code></pre></div><p>Удаление переносов как-то так:</p><div class="codebox"><pre><code>sed -e &quot;:a; /$/N; s/\n//; ta&quot;</code></pre></div><p>Но как соединить сие вместе и избежать удаления новой строки после PRIVACY?</p><p>UPD Собственно клин светом не сошелся на sed, в арсенале ведь весь linux.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sat, 21 Dec 2013 20:12:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78392#p78392</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77305#p77305</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Проблема экранирования кавычек внутри кавычек в консольном сеансе. Используйте код кавычек ASCII 34 (hex24)<br /></p><div class="codebox"><pre><code>
echo 8. &quot;Ребята, напишите мне письмо&quot; | sed -n -e &quot;s/\x24//gp&quot;
</code></pre></div></blockquote></div><p>Маленькая ошибочка - код кавычки в HEX будет <strong>0x22</strong></p><div class="codebox"><pre><code>
echo 8. &quot;Ребята, напишите мне письмо&quot; | sed -n -e &quot;s/\x22//gp&quot;
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (yuriy2000)]]></author>
			<pubDate>Thu, 14 Nov 2013 17:28:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77305#p77305</guid>
		</item>
		<item>
			<title><![CDATA[Re: sed, регулярные выражения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76639#p76639</link>
			<description><![CDATA[<p>Но ведь</p><div class="codebox"><pre><code>sed -n -e &quot;s/\&quot;//gp&quot; test</code></pre></div><p>работает. Странный sed.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Tue, 29 Oct 2013 10:30:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76639#p76639</guid>
		</item>
	</channel>
</rss>
