<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Помогите с заменой слова в строке...</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html</link>
    <description>Пишу скрипт и я не могу сообразить как поменять третье (150000) слово на &quot;1&quot; в строке:&lt;br&gt;&lt;br&gt;#l# 1284725281 150000&lt;br&gt;&lt;br&gt;учитывая, что третье слово может быть разной длиной, а второе всегда одинаковой, но с разными цифрами&lt;br&gt;&lt;br&gt;Я примерно вот так начал писать, а дальше не соображу:&lt;br&gt;&lt;br&gt;sed &apos;s/^#l#&#092; &#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#092; /#l#&#092; &quot;вот тут уже не соображу&quot;&apos; ahistory.dat&lt;br&gt;</description>

<item>
    <title>Помогите с заменой слова в строке... (Andrey Mitrofanov)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#7</link>
    <pubDate>Sat, 30 Jun 2012 05:04:47 GMT</pubDate>
    <description>&amp;gt;awk &apos;&#123;print $1,$2,$3=1&#125;&apos; &lt;br&gt;&lt;br&gt;&#123;$3=1;print&#125;&lt;br&gt;&#123;$NF=1;print&#125;&lt;br&gt;</description>
</item>

<item>
    <title>Помогите с заменой слова в строке... (LSTemp)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#6</link>
    <pubDate>Fri, 29 Jun 2012 20:03:23 GMT</pubDate>
    <description>&amp;gt;&amp;gt;&amp;gt; str=&quot;$&#123;str&#037; *&#125; 1&quot; &lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;br&gt;&amp;gt;&amp;gt; как ваша конструкция работает, ибо я 1й раз такое вижу.&lt;br&gt;&amp;gt;&amp;gt; пс: а как вам  мое решение?&lt;br&gt;&amp;gt; Оно работает, что главное. С точки зрения простых манипуляций логами - не &lt;br&gt;&amp;gt; вижу принципиальных отличий между sed и awk. &lt;br&gt;&lt;br&gt;здесь Вы не правы: &lt;br&gt;&lt;br&gt;основное преимущество sed, в том, что он ПОСТРОЧНО обрабатывает вход =&amp;gt; минимальное потребление ресурсов ОС и независимость от размера входящего потока данных.&lt;br&gt;&lt;br&gt;основное преимущество awk в том, что его гибкость (читай использование скриптов) позволяет выполнить практически любую операцию над входным потоком данных и включать его в КОНВЕЙЕР. Он в отличие от sed работает не построчно с входящими данными, а с их блоками, что позволяет организовать более тонкую обработку. Но ресурсов ОС жрет тоже не много&lt;br&gt;&lt;br&gt;sed и awk - это классика.&lt;br&gt;&lt;br&gt;&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; Не могу оценивать с точки зрения сложных &quot;рефаторингов&quot; какого либо текста &lt;br&gt;&amp;gt; или кода. Но, не обладая доскональным пониманием синтаксисов как awk/sed, так &lt;br&gt;&amp;gt; и текста-цели, страшно</description>
</item>

<item>
    <title>Помогите с заменой слова в строке... (Af.)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#5</link>
    <pubDate>Thu, 28 Jun 2012 15:46:12 GMT</pubDate>
    <description>&amp;gt;&amp;gt; str=&quot;$&#123;str&#037; *&#125; 1&quot; &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt; как ваша конструкция работает, ибо я 1й раз такое вижу.&lt;br&gt;&amp;gt; пс: а как вам  мое решение?&lt;br&gt;&lt;br&gt;Оно работает, что главное. С точки зрения простых манипуляций логами - не вижу принципиальных отличий между sed и awk. Склонен согласиться с http://stackoverflow.com/a/367014 Не могу оценивать с точки зрения сложных &quot;рефаторингов&quot; какого либо текста или кода. Но, не обладая доскональным пониманием синтаксисов как awk/sed, так и текста-цели, страшновато для сложных вещей &quot;изобретать&quot; собственные реализации инструментов на базе sed/awk и т.п. Неприятны вероятность ошибки и траты на исправления.&lt;br&gt;&lt;br&gt;Конструкция $&#123;parameter&#037;pattern&#125; описана в разделе Parameter Expansion из man bash. &apos;&#037;&apos; - оператор отрезать суффикс от значения переменной. То что правее &apos;&#037;&apos; - шаблон, что подходит под шаблон вырезается. Если &#037; одиночный, цель наикратчайшее совпадение. Двойной - самое длинное. &apos;&#037; *&apos; означает последний пробел и что правее него.&lt;br&gt;</description>
</item>

<item>
    <title>Помогите с заменой слова в строке... (stereoPANDA)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#4</link>
    <pubDate>Wed, 27 Jun 2012 19:54:52 GMT</pubDate>
    <description>Af,&lt;br&gt;Что бы узнать, что быстрее работает - выполните time:&lt;br&gt;#time &#091;command or script&#093;&lt;br&gt;Насколько мне хватает компетенции, я могу сказать, что в &quot;погоне за временем&quot; стараются придерживаться нескольких правил:&lt;br&gt;1. Если все можно сделать на sed, то это будет быстрее чем sed + awk или + cut или + grep. Правило действует на все утилиты.&lt;br&gt;2. Меньше пайпов, это следует,в принципе, из правила 1.&lt;br&gt;3. sed работает быстрее всех. (это я где-то прочитал, проверял пару раз - поддтвердилось)&lt;br&gt;&lt;br&gt;А что касается реализации решения задачи на bash, то прошу расписать как ваша конструкция работает, ибо я 1й раз такое вижу.&lt;br&gt;&lt;br&gt;пс: а как вам  мое решение?&lt;br&gt;&lt;br&gt;&amp;gt; Забыл. :) Если без длины слов, но условие - меняем последнее в &lt;br&gt;&amp;gt; строке слово: &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; str=&quot;#l# 1284725281 150000&quot; &lt;br&gt;&amp;gt; str=&quot;$&#123;str&#037; *&#125; 1&quot; &lt;br&gt;&amp;gt; echo &quot;$&#123;str&#125;&quot; &lt;br&gt;&amp;gt; &#091;/code&#093; </description>
</item>

<item>
    <title>Помогите с заменой слова в строке... (Af.)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#3</link>
    <pubDate>Wed, 27 Jun 2012 19:25:36 GMT</pubDate>
    <description>Забыл. :) Если без длины слов, но условие - меняем последнее в строке слово:&lt;br&gt;&#091;code&#093;&lt;br&gt;str=&quot;#l# 1284725281 150000&quot;&lt;br&gt;str=&quot;$&#123;str&#037; *&#125; 1&quot;&lt;br&gt;echo &quot;$&#123;str&#125;&quot;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>Помогите с заменой слова в строке... (Af.)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#2</link>
    <pubDate>Wed, 27 Jun 2012 19:21:19 GMT</pubDate>
    <description>Bash только:&lt;br&gt;&#091;code&#093;&lt;br&gt;shopt -s extglob&lt;br&gt;str=&quot;#l# 1284725281 150000&quot;&lt;br&gt;echo &quot;$&#123;str/&#037; *(&#091;&#091;:digit:&#093;&#093;)/ 1&#125;&quot;&lt;br&gt;echo &quot;или если слово с буквами и цифрами&quot;&lt;br&gt;echo &quot;$&#123;str/&#037; *(&#091;&#091;:alnum:&#093;&#093;)/ 1&#125;&quot;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;Sed:&lt;br&gt;&#091;code&#093;&lt;br&gt;str=&quot;#l# 1284725281 150000&quot;&lt;br&gt;sed &apos;s/ &#091;0-9&#093;*$/ 1/&apos; &amp;lt;&amp;lt;&amp;lt; &quot;$&#123;str&#125;&quot;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;В обоих случаях использованы регулярные выражения, они ресурсоёмкие. А использование pipe &quot;&amp;#124;&quot; влечёт за собой +1 вызов экземпляра shell. На это, в свою очередь, тоже расходуются ресурсы-время. Какой из трёх вариантов (bash только, awk, sed) и в какой ситуации быстрее - не знаю. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Кстати, вопрос ко всем, что быстрее работает (или должно бы быть быстрее)?&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;P.S. Без регулярных выражений, Bash,&lt;br&gt;условившись о постоянной длине первых двух слов:&lt;br&gt;&#091;code&#093;&lt;br&gt;str=&quot;#l# 1284725281 150000&quot;&lt;br&gt;str=&quot;$&#123;str:0:14&#125; 1&quot;&lt;br&gt;echo &quot;$&#123;str&#125;&quot;&lt;br&gt;str=&quot;$(cut -c1-14 &amp;lt;&amp;lt;&amp;lt; &quot;$&#123;str&#125;&quot;) 1&quot;&lt;br&gt;echo &quot;$&#123;str&#125;&quot;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>Помогите с заменой слова в строке... (stereoPANDA)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID1/93519.html#1</link>
    <pubDate>Wed, 27 Jun 2012 14:20:18 GMT</pubDate>
    <description>echo &quot;#l# 1284725281 150000&quot; &amp;#124; awk &apos;&#123;print $1,$2,$3=1&#125;&apos;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; Пишу скрипт и я не могу сообразить как поменять третье (150000) слово &lt;br&gt;&amp;gt; на &quot;1&quot; в строке: &lt;br&gt;&amp;gt; #l# 1284725281 150000 &lt;br&gt;&amp;gt; учитывая, что третье слово может быть разной длиной, а второе всегда одинаковой, &lt;br&gt;&amp;gt; но с разными цифрами &lt;br&gt;&amp;gt; Я примерно вот так начал писать, а дальше не соображу: &lt;br&gt;&amp;gt; sed &apos;s/^#l#&#092; &#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#091;0-9&#093;&#092; /#l#&#092; &quot;вот тут уже &lt;br&gt;&amp;gt; не соображу&quot;&apos; ahistory.dat </description>
</item>

</channel>
</rss>
