<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Vidul Nikolaev Petrov: Ruby one-liners (file manipulation)</title>
    <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Ruby one-liners (file manipulation)</title>
      <description>&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;
&lt;span class="comment"&gt;# number each line of a file&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts &amp;quot;#{$.}\t#{$_}&amp;quot;&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print all non-blank lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.chomp.empty? and next&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# number and print all non-blank lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.chomp.empty? or print $.,&amp;quot;\t&amp;quot;, $_&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# number and print each blank line&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $. if $_.chomp.empty?&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# reverse order of lines (`tac` style)&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts File.open($&amp;lt;.filename).readlines.reverse&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print matched string from lines, matching the pattern&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_.scan(/^\w+/)&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="ident"&gt;etc&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="ident"&gt;passwd&lt;/span&gt;

&lt;span class="comment"&gt;# triple space a file and reverse order of lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$,=&amp;quot;\n\n\n&amp;quot;; puts File.readlines($&amp;lt;.filename).reverse.join&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print first line of a file (emulate 'head -1')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_; break&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$. == 1 or break&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print last line of a file (emulates 'tail -1')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;END{puts $_}&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print last line number (emulates 'wc -l')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;loop{gets or break}; puts $.&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print only lines that match a regular expression (emulates 'grep')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if not /regex/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print only lines that do not match a regular expression (emulates 'grep -v')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if /regex/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print section of file between two regular expressions, /^root/ and /^nobody/&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_ if /^root/../^nobody/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print file and remove duplicate, consecutive lines from a file (emulates 'uniq')&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.eql? $; or puts $_;$; = $_;&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print file except for blank lines&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if $_.chomp.empty?&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if /^\s*$/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if $_.split(/\S+/).size &amp;lt; 2&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print file except for lines, starting with digit (unclear and inefficient)&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;next if (48..57).to_a.include?($_.split(//)[0][0])&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# delete all leading blank lines at top of file&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$,=&amp;quot;$.&amp;quot; if not $_.chomp.empty?; $, or next&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# print section of file from regex to end of file&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$,=&amp;quot;$.&amp;quot; if /regex/; $, or next&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# delete leading and trailing whitespace from each line&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;$_.strip!.sub!(/$/, &amp;quot;\n&amp;quot;)&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_.strip! + $/&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# delete leading whitespace from the beginning of each line&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;ne&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;puts $_.lstrip! || $_&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;

&lt;span class="comment"&gt;# convert DOS newlines (CR/LF) to Unix format (LF)&lt;/span&gt;
&lt;span class="ident"&gt;ruby&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;pe&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;sub(/\r\n/, &amp;quot;\n&amp;quot;)&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="ident"&gt;file&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;txt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 20 Jul 2007 11:11:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8396e808-a634-4ed6-8530-8b0533a05d5e</guid>
      <author>root</author>
      <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation</link>
      <category>programming</category>
      <category>Ruby</category>
      <category>oneliners</category>
      <category>Ruby</category>
    </item>
    <item>
      <title>"Ruby one-liners (file manipulation)" by Vidul</title>
      <description>&lt;p&gt;Not really stolen &amp;#8211; read the code more carefully &amp;#8211; each of my one-liners differs from the older ones.&lt;/p&gt;</description>
      <pubDate>Sun, 21 Oct 2007 13:24:24 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:89baada9-a073-4df8-8cc8-e85132344a89</guid>
      <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation#comment-9</link>
    </item>
    <item>
      <title>"Ruby one-liners (file manipulation)" by Eric B.</title>
      <description>&lt;p&gt;Stolen from &lt;a href="http://fepus.net/ruby1line.txt" rel="nofollow"&gt;http://fepus.net/ruby1line.txt&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 10 Oct 2007 15:55:44 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7a933d84-57da-4905-9fec-b969a0da5078</guid>
      <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation#comment-7</link>
    </item>
    <item>
      <title>"Ruby one-liners (file manipulation)" by Vidul</title>
      <description>Saving the original file will solve the problem:
&lt;pre&gt;
ruby -i.org -pe &#8216;gsub!(/\r\n/, &#8221;\n&#8221;)&#8217; nbr_.afm
&lt;/pre&gt;
where &amp;#8220;org&amp;#8221; will serve as extention to the original file, which will stay untouched.</description>
      <pubDate>Thu, 23 Aug 2007 08:35:19 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:403bc2ce-d0b4-4893-bee8-9c9e4503babf</guid>
      <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation#comment-6</link>
    </item>
    <item>
      <title>"Ruby one-liners (file manipulation)" by Peter Bailey</title>
      <description>&lt;p&gt;I get the following error when I try to convert a Windows font file to the same, with Unix line endings.&lt;/p&gt;


	&lt;p&gt;ruby -i -pe &amp;#8216;gsub!(/\r\n/, &amp;#8221;\n&amp;#8221;)&amp;#8217; nbr&lt;i&gt;_&lt;/i&gt;.afm&lt;/p&gt;


	&lt;p&gt;-e:1: Can&amp;#8217;t do inplace edit without backup (fatal)&lt;/p&gt;</description>
      <pubDate>Wed, 22 Aug 2007 07:50:37 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:3f433cea-26f9-4b1a-a541-0e69260629ce</guid>
      <link>http://www.vidul.com/articles/2007/07/20/ruby-one-liners-file-manipulation#comment-4</link>
    </item>
  </channel>
</rss>
