<?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>mysyslog.ru &#187; Новости</title>
	<atom:link href="http://mysyslog.ru/posts/category/news/feed" rel="self" type="application/rss+xml" />
	<link>http://mysyslog.ru</link>
	<description>Всякая IT всячина</description>
	<lastBuildDate>Sat, 17 Mar 2012 17:39:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Эмулирование Unix команд при помощи sed</title>
		<link>http://mysyslog.ru/posts/637</link>
		<comments>http://mysyslog.ru/posts/637#comments</comments>
		<pubDate>Wed, 02 Feb 2011 08:42:26 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=637</guid>
		<description><![CDATA[Набрел на интересную страничку. sed во всей своей красе.

UNIX          &#124;  SED
--------------+----------------------------------------------------------------
 cat          &#124;  sed ':'
 cat -s       &#124;  sed '1s/^$//p;/./,/^$/!d'
 tac        [...]]]></description>
			<content:encoded><![CDATA[<p>Набрел на <a href="http://sed.sourceforge.net/local/docs/emulating_unix.txt">интересную страничку</a>. sed во всей своей красе.</p>
<pre class="brush: bash;">
UNIX          |  SED
--------------+----------------------------------------------------------------
 cat          |  sed ':'
 cat -s       |  sed '1s/^$//p;/./,/^$/!d'
 tac          |  sed '1!G;h;$!d'
 grep         |  sed '/patt/!d'
 grep -v      |  sed '/patt/d'
 head         |  sed '10q'
 head -1      |  sed 'q'
 tail         |  sed -e ':a' -e '$q;N;11,$D;ba'
 tail -1      |  sed '$!d'
 tail -f      |  sed -u '/./!d'
 cut -c 10    |  sed 's/\(.\)\{10\}.*/\1/'
 cut -d: -f4  |  sed 's/\(\([^:]*\):\)\{4\}.*/\2/'
 tr A-Z a-z   |  sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
 tr a-z A-Z   |  sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'
 tr -s ' '    |  sed 's/ \+/ /g'
 tr -d '&#92;&#48;12' |  sed 'H;$!d;g;s/\n//g'
 wc -l        |  sed -n '$='
 uniq         |  sed 'N;/^\(.*\)\n\1$/!P;D'
 rev          |  sed '/\n/!G;s/\(.\)\(.*\n\)/&amp;\2\1/;//D;s/.//'
 basename     |  sed 's,.*/,,'
 dirname      |  sed 's,[^/]*$,,'
 xargs        |  sed -e ':a' -e '$!N;s/\n/ /;ta'
 paste -sd:   |  sed -e ':a' -e '$!N;s/\n/:/;ta'
 cat -n       |  sed '=' | sed '$!N;s/\n/ /'
 grep -n      |  sed -n '/patt/{=;p;}' | sed '$!N;s/\n/:/'
 cp orig new  |  sed 'w new' orig
 hostname -s  |  hostname | sed 's/\..*//'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/637/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sed tips and tricks</title>
		<link>http://mysyslog.ru/posts/598</link>
		<comments>http://mysyslog.ru/posts/598#comments</comments>
		<pubDate>Wed, 24 Nov 2010 16:06:20 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=598</guid>
		<description><![CDATA[Sed &#8211; прекрасное средство редактирования текста с отвратительной документацией. В скриптах он часто бывает незаменим, но чтобы выполнить что-то непривычное приходится долго искать интернете нужный пример или долго экспериментировать с разными вариантами. Очень неудобно!
Так что сделаю сделаю себе памятку!

1) Разделители в sed
Часто нужно поменять какие-то пути в файлах и выглядит это страшно, примерно так:
echo $PATH [...]]]></description>
			<content:encoded><![CDATA[<p>Sed &#8211; прекрасное средство редактирования текста с отвратительной документацией. В скриптах он часто бывает незаменим, но чтобы выполнить что-то непривычное приходится долго искать интернете нужный пример или долго экспериментировать с разными вариантами. Очень неудобно!<br />
Так что сделаю сделаю себе памятку!<br />
<span id="more-598"></span><br />
<strong>1) Разделители в sed</strong><br />
Часто нужно поменять какие-то пути в файлах и выглядит это страшно, примерно так:</p>
<pre class="brush: bash;">echo $PATH | sed s'/\/etc/\/usr\/local\/etc/g'</pre>
<p>Читать это невозможно, да и ошибиться с экранирование легче легкого!<br />
На самом деле sed воспринимает и другие символы в качестве разделителей, а использование &#8216;/&#8217; является &#8220;исторической традицией&#8217;. Данную конструкцию легко заменить на такую:</p>
<pre class="brush: bash;">echo $PATH | sed s':/etc:/usr/local/etc:g'</pre>
<p>Или такую:</p>
<pre class="brush: bash;">echo $PATH | sed s'|/etc|/usr/local/etc|g'</pre>
<p>Согласитесь, так намного лучше!</p>
<p>2) <strong>Выполнение нескольких команд sed подряд</strong><br />
Иногда нужно выполнить несколько команд подряд, самый простой способ &#8211; сделать несколько pipe, но выглядит это так себе.</p>
<pre class="brush: bash;">echo &quot;New string&quot; | sed 's/New/Old/' | sed 's/string/letter/'</pre>
<p>Вместо этого можно задать последовательность при помощи опции <strong>-e</strong>:</p>
<pre class="brush: bash;">echo &quot;New string&quot; | sed -e 's/New/Old/' -e 's/string/letter/'</pre>
<p>Или можно задать последовательность команд через &#8216;;&#8217;:</p>
<pre class="brush: bash;">echo &quot;New string&quot; | sed 's/New/Old/; s/string/letter/'</pre>
<p>3) <strong>Экранирование команд sed в разных оболочках</strong><br />
Очень важная тема, особенно в контексте написания скриптов. Например если <strong>/bin/csh</strong> ввести такую команду:</p>
<pre class="brush: bash;">cat /etc/resolv.conf | sed /search/ a\
nameserver 127.0.0.1 \
'
sed: 1: &quot;/search/ a
1 ...&quot;: command a expects \ followed by text
</pre>
<p>Получаем неприятную ошибку вместо ожидаемого результата. Решение &#8211; добавить еще один &#8216;\&#8217; после &#8216;a\&#8217;:</p>
<pre class="brush: bash;">cat /etc/resolv.conf | sed /search/ a\ \
nameserver 127.0.0.1 \
'
</pre>
<p>В общем случае для <strong>sed в C shell</strong> экранировать нужно так:</p>
<pre class="brush: bash;">
#!/bin/csh -f
sed 's/a/A/g \
s/e/E/g \
s/i/I/g \
s/o/O/g \
s/u/U/g' &lt;old&gt;new
</pre>
<p>Для <strong>Bash</strong> все проще:</p>
<pre class="brush: bash;">
#!/bin/sh
sed '
s/a/A/g
s/e/E/g
s/i/I/g
s/o/O/g
s/u/U/g' &lt;old &gt;new
</pre>
<p>4) <strong>Основные команды sed</strong></p>
<table style="height: 17px;" border="0" width="129">
<tbody>
<tr>
<td>Команда</td>
<td>Описание</td>
</tr>
<tr>
<td>p</td>
<td>Вывести адресуемую строку</td>
</tr>
<tr>
<td>=</td>
<td>Вывести адреса адресуемых строк</td>
</tr>
<tr>
<td>a</td>
<td>Добавление текста после адресуемой строки</td>
</tr>
<tr>
<td>i</td>
<td>Добавление текста перед адресуемой строкой</td>
</tr>
<tr>
<td>с</td>
<td>Замена адресуемой строки блоком указанного текста</td>
</tr>
<tr>
<td>d</td>
<td>Удаление адресуемой строки</td>
</tr>
</tbody>
</table>
<p>Собственно они есть в любом нормальном описании по sed, здесь я их привожу, как шпаргалку и за одно несколько примеров.<br />
Поиск номера строки по определенному шаблону, опция -n запрещает вывод всех остальных строк:</p>
<pre class="brush: bash;">cat /path/to/file | sed -n '/some/='</pre>
<p>Поиск строки по шаблону:</p>
<pre class="brush: bash;">cat /path/to/file | sed -n '/some/p'</pre>
<p>Удалим все строки со словом some из файла /path/to/file:</p>
<pre class="brush: bash;">sed -I '' -e '/some/d' /path/to/file</pre>
<p>Удалим строки с первой по третью:</p>
<pre class="brush: bash;">sed -I '' -e '1,3d' /path/to/file</pre>
<p>Удалим последнюю строку</p>
<pre class="brush: bash;">sed -I '' -e '$d' /path/to/file</pre>
<p>Опция -I нужна для редактирования указанного файла, а параметр &#8221; говорит, что не нужно создавать резервную копию.<br />
Добавление и изменение строк работает аналогично.</p>
<p>5) <strong>Хорошая документация по sed</strong><br />
В принципе для какого-то просто скриптинга всех этих приемов более чем хватает, но всегда может получить больше, например на <a href="http://www.grymoire.com/Unix/Sed.html">сайте</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/598/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Быстрый способ создать большой файл при помощи dd</title>
		<link>http://mysyslog.ru/posts/430</link>
		<comments>http://mysyslog.ru/posts/430#comments</comments>
		<pubDate>Tue, 20 Apr 2010 15:33:41 +0000</pubDate>
		<dc:creator>constantine.malov</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[env]]></category>

		<guid isPermaLink="false">http://mysyslog.ru/?p=430</guid>
		<description><![CDATA[Иногда для тестирования нужно создать какой-то большой файл. Для этого чаще всего применяют утилиту dd.
Файл создается обычно так:

dd if=/dev/zero of=/data/bigfile count=1024 bs=1024k

Получим файл размером в 1GB, причем dd честно 1024 раза запишет нули блоками по 1МБ. С 1Гб можно и потерпеть, но как быть с 10ГБ или 100ГБ? Ждать долго, да и диски жалко. Есть [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда для тестирования нужно создать какой-то большой файл. Для этого чаще всего применяют утилиту dd.<br />
Файл создается обычно так:</p>
<pre class="brush: plain; light: true;">
dd if=/dev/zero of=/data/bigfile count=1024 bs=1024k
</pre>
<p>Получим файл размером в 1GB, причем dd честно 1024 раза запишет нули блоками по 1МБ. С 1Гб можно и потерпеть, но как быть с 10ГБ или 100ГБ? Ждать долго, да и диски жалко. Есть более быстрый и простой способ &#8211; опция <strong>seek</strong>. Смысл ее в том, что запись dd начнет только после нахождения определенного номера блока с начала вывода из if. Если я правильно понимаю физику процесса, то происходит это так: dd создает файл, ждет пока пройдет N блоков, указанных в seek, после чего начинает записывать блоки, указанные в count. Получается &#8220;пустой&#8221; файл большого размера. </p>
<pre class="brush: plain; light: true;">
dd if=/dev/zero of=/data/bigfile count=1 bs=1024k seek=`expr 1024 * 10`
</pre>
<p>Мгновенно получаем файл, размером в 10ГБ!</p>
]]></content:encoded>
			<wfw:commentRss>http://mysyslog.ru/posts/430/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

