<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Прошу помощи с sed]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=7187&amp;type=atom" />
	<updated>2010-10-11T15:05:13Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=7187</id>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи с sed]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=99821#p99821" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ufomen пишет:</cite><blockquote><p>По идее<br />$ знак конца строки,<br />.* - любые символы в любом кол-ве<br />\. экранированный знак точки</p><p>Тоесть&nbsp; это как-бы должно значить &quot;заменить все с конца стоки (с права на лево) до первой найденной - точки ничем&quot;</p></blockquote></div><p>всё верно. гуглите на тему &quot;жадность звёздочким в sed&quot;. звёздочка пожирает не до первой, а всё, что сможет - точка == любой символ, в том числе и точка. Вот она у вас всё и пожрала. Ибо жадная.</p><p>ищите не &quot;любой символ&quot;, а &quot;любой кроме точки&quot;:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ echo &quot;123.25.64.6.smtp &gt; 92.45.59.112.58101&quot; | sed &#039;s/\.[^.]*$//&#039;<br />123.25.64.6.smtp &gt; 92.45.59.112<br /></div><br />можно подойти к проблеме с другой стороны: пусть звёздочка жадная, заставим её жрать все точки, кроме одной! и выделим то, что пожрётся:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ echo &quot;123.25.64.6.smtp &gt; 92.45.59.112.58101&quot; | sed -r &#039;s/(.*)\..*/\1/&#039;<br />123.25.64.6.smtp &gt; 92.45.59.112<br /></div><br />тут 2 звёздочки, регулярка работает слева-направо, потому первая звёздочка жрёт всё, кроме одной точки (мы её явно указали). Это последняя точка, т.к. звёздочка жадная. Второй звёздочке точек уже не достанется.</p><div class="quotebox"><cite>ufomen пишет:</cite><blockquote><p>Мде, регулярки учить нужно...</p></blockquote></div><p>а то!?<br />то, что вы написали, хоть и работает, но слишком много лишнего...</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2010-10-11T15:05:13Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=99821#p99821</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи с sed]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=99100#p99100" />
			<content type="html"><![CDATA[<p>Ну в общем решил сам но не без помощи ))</p><p>Варианты:<br /></p><div class="codebox"><pre><code>awk -F&#039;.&#039; &#039;{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.&quot;$4}&#039;

sed -s &quot;s/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)\(\.[0-9]*\)/\1/&quot;

sed -s &quot;s/\(.*\)\(\..*$\)/\1/&quot;</code></pre></div><p>Мде, регулярки учить нужно... </p><p>P.S. Как поставить РЕШЕНО не знаю )</p>]]></content>
			<author>
				<name><![CDATA[ufomen]]></name>
				<uri>https://linuxforum.ru/profile.php?id=4863</uri>
			</author>
			<updated>2010-10-08T14:07:09Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=99100#p99100</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи с sed]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=98587#p98587" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>CyberDaemon пишет:</cite><blockquote><p>sed &#039;s/\.\[^.\]*$//&#039;</p></blockquote></div><p>Попробывал, у меня Ваша конструкция выводит неизмененный список:</p><div class="codebox"><pre><code># cat /tmp/mail2 |sed &#039;s/\.\[^.\]*$//&#039;
123.25.64.6.smtp &gt; 92.45.59.112.58101
92.45.59.112.58101 &gt; 123.25.64.6.smtp
123.25.64.6.smtp &gt; 92.45.59.112.58101</code></pre></div><br /><p>P.S.<br /></p><div class="codebox"><pre><code># cat /etc/issue
CentOS release 4.8 (Final)
Kernel \r on an \m

# rpm -q sed
sed-4.1.2-7.el4</code></pre></div>]]></content>
			<author>
				<name><![CDATA[ufomen]]></name>
				<uri>https://linuxforum.ru/profile.php?id=4863</uri>
			</author>
			<updated>2010-10-06T22:04:57Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=98587#p98587</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи с sed]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=98497#p98497" />
			<content type="html"><![CDATA[<p>sed &#039;s/\.\[^.\]*$//&#039;</p>]]></content>
			<author>
				<name><![CDATA[CyberDaemon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=2674</uri>
			</author>
			<updated>2010-10-06T16:20:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=98497#p98497</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Прошу помощи с sed]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=98398#p98398" />
			<content type="html"><![CDATA[<p>Всем привет, <br />есть список IP вида:</p><div class="codebox"><pre><code># cat /tmp/mail2
123.25.64.6.smtp &gt; 92.45.59.112.58101
92.45.59.112.58101 &gt; 123.25.64.6.smtp
123.25.64.6.smtp &gt; 92.45.59.112.58101</code></pre></div><p>пытаюсь sed рубануть все с конца строки до первой точки:</p><div class="codebox"><pre><code>cat /tmp/mail2 |sed &#039;s/\..*$//&#039;</code></pre></div><p>По идее <br />$ знак конца строки, <br />.* - любые символы в любом кол-ве<br />\. экранированный знак точки </p><p>Тоесть&nbsp; это как-бы должно значить &quot;заменить все с конца стоки (с права на лево) до первой найденной - точки ничем&quot;</p><p>НО на выходе получаю <br /></p><div class="codebox"><pre><code>123
92
123</code></pre></div><p>Почему оно заменяет все до последней встретившейся точки если считать с конца строки?</p><p>С sed опыта мало, погуглил но не пойму почему оно ТАК работает.</p>]]></content>
			<author>
				<name><![CDATA[ufomen]]></name>
				<uri>https://linuxforum.ru/profile.php?id=4863</uri>
			</author>
			<updated>2010-10-06T10:48:10Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=98398#p98398</id>
		</entry>
</feed>
