Skip to content

Commit 30d06f5

Browse files
added 24th cli tip
1 parent a718f9d commit 30d06f5

File tree

10 files changed

+121
-8
lines changed

10 files changed

+121
-8
lines changed

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ I'm addicted to reading fantasy/sci-fi books, so I have a [blog](https://learnby
6565

6666
## Tips
6767

68+
* [CLI tip 24: inserting file contents one line at a time](https://learnbyexample.github.io/tips/cli-tip-24/)
6869
* [Python tip 24: modifying list using insert and slice](https://learnbyexample.github.io/tips/python-tip-24/)
6970
* [Vim tip 22: word and WORD motions](https://learnbyexample.github.io/tips/vim-tip-22/)
7071
* [CLI tip 23: recursive filename matching with globstar](https://learnbyexample.github.io/tips/cli-tip-23/)

Diff for: atom.xml

+64-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,71 @@
55
<link href="https://learnbyexample.github.io/atom.xml" rel="self" type="application/atom+xml"/>
66
<link href="https://learnbyexample.github.io"/>
77
<generator uri="https://www.getzola.org/">Zola</generator>
8-
<updated>2023-02-28T00:00:00+00:00</updated>
8+
<updated>2023-03-07T00:00:00+00:00</updated>
99
<id>https://learnbyexample.github.io/atom.xml</id>
10+
<entry xml:lang="en">
11+
<title>CLI tip 24: inserting file contents one line at a time</title>
12+
<published>2023-03-07T00:00:00+00:00</published>
13+
<updated>2023-03-07T00:00:00+00:00</updated>
14+
<link rel="alternate" href="https://learnbyexample.github.io/tips/cli-tip-24/" type="text/html"/>
15+
<id>https://learnbyexample.github.io/tips/cli-tip-24/</id>
16+
<content type="html">&lt;p&gt;The &lt;code&gt;R&lt;&#x2F;code&gt; command provided by &lt;code&gt;GNU sed&lt;&#x2F;code&gt; is very similar to &lt;code&gt;r&lt;&#x2F;code&gt; with respect to most of the rules seen in an earlier &lt;a href=&quot;https:&#x2F;&#x2F;learnbyexample.github.io&#x2F;tips&#x2F;cli-tip-18&#x2F;&quot;&gt;tip&lt;&#x2F;a&gt;. But instead of reading entire file contents, &lt;code&gt;R&lt;&#x2F;code&gt; will read one line at a time from the source file when the given address matches. If entire file has already been read and another address matches, &lt;code&gt;sed&lt;&#x2F;code&gt; will proceed as if the line was empty.&lt;&#x2F;p&gt;
17+
&lt;p&gt;Here&#x27;s an example:&lt;&#x2F;p&gt;
18+
&lt;pre data-lang=&quot;ruby&quot; style=&quot;background-color:#f5f5f5;color:#1f1f1f;&quot; class=&quot;language-ruby &quot;&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span&gt;$ cat ip.txt
19+
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; sky
20+
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; apple
21+
&lt;&#x2F;span&gt;&lt;span&gt;$ cat fav_colors.txt
22+
&lt;&#x2F;span&gt;&lt;span&gt;deep red
23+
&lt;&#x2F;span&gt;&lt;span&gt;yellow
24+
&lt;&#x2F;span&gt;&lt;span&gt;reddish
25+
&lt;&#x2F;span&gt;&lt;span&gt;brown
26+
&lt;&#x2F;span&gt;&lt;span&gt;
27+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#7f8989;&quot;&gt;# add a line from &amp;#39;ip.txt&amp;#39;
28+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#7f8989;&quot;&gt;# whenever a line from &amp;#39;fav_colors.txt&amp;#39; contains &amp;#39;red&amp;#39;
29+
&lt;&#x2F;span&gt;&lt;span&gt;$ sed &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d07711;&quot;&gt;&amp;#39;&#x2F;red&#x2F;R ip.txt&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; fav_colors.txt
30+
&lt;&#x2F;span&gt;&lt;span&gt;deep red
31+
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; sky
32+
&lt;&#x2F;span&gt;&lt;span&gt;yellow
33+
&lt;&#x2F;span&gt;&lt;span&gt;reddish
34+
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; apple
35+
&lt;&#x2F;span&gt;&lt;span&gt;brown
36+
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
37+
&lt;p&gt;You can combine with other &lt;code&gt;sed&lt;&#x2F;code&gt; commands to solve various kind of problems. For example, to replace the matching lines:&lt;&#x2F;p&gt;
38+
&lt;pre data-lang=&quot;ruby&quot; style=&quot;background-color:#f5f5f5;color:#1f1f1f;&quot; class=&quot;language-ruby &quot;&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span style=&quot;color:#7f8989;&quot;&gt;# empty &#x2F;&#x2F; will refer to the previously used regex, &#x2F;red&#x2F; in this case
39+
&lt;&#x2F;span&gt;&lt;span&gt;$ sed &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d07711;&quot;&gt;&amp;#39;&#x2F;red&#x2F;R ip.txt&amp;#39; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;e &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d07711;&quot;&gt;&amp;#39;&#x2F;&#x2F;d&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; fav_colors.txt
40+
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; sky
41+
&lt;&#x2F;span&gt;&lt;span&gt;yellow
42+
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; apple
43+
&lt;&#x2F;span&gt;&lt;span&gt;brown
44+
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
45+
&lt;p&gt;And, here&#x27;s how you can interleave contents of two files:&lt;&#x2F;p&gt;
46+
&lt;pre data-lang=&quot;ruby&quot; style=&quot;background-color:#f5f5f5;color:#1f1f1f;&quot; class=&quot;language-ruby &quot;&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span style=&quot;color:#7f8989;&quot;&gt;# &#x2F;dev&#x2F;stdin will get data from stdin (output of &amp;#39;seq 4&amp;#39; here)
47+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#7f8989;&quot;&gt;# same as: seq 4 | paste -d&amp;#39;\n&amp;#39; fav_colors.txt -
48+
&lt;&#x2F;span&gt;&lt;span&gt;$ seq &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;4 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; sed &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d07711;&quot;&gt;&amp;#39;R &#x2F;dev&#x2F;stdin&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; fav_colors.txt
49+
&lt;&#x2F;span&gt;&lt;span&gt;deep red
50+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;1
51+
&lt;&#x2F;span&gt;&lt;span&gt;yellow
52+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;2
53+
&lt;&#x2F;span&gt;&lt;span&gt;reddish
54+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;3
55+
&lt;&#x2F;span&gt;&lt;span&gt;brown
56+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;4
57+
&lt;&#x2F;span&gt;&lt;span&gt;
58+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#7f8989;&quot;&gt;# using &amp;#39;paste&amp;#39; here will add a newline when stdin runs out of data
59+
&lt;&#x2F;span&gt;&lt;span&gt;$ seq &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;2 &lt;&#x2F;span&gt;&lt;span style=&quot;color:#72ab00;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; sed &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d07711;&quot;&gt;&amp;#39;R &#x2F;dev&#x2F;stdin&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; fav_colors.txt
60+
&lt;&#x2F;span&gt;&lt;span&gt;deep red
61+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;1
62+
&lt;&#x2F;span&gt;&lt;span&gt;yellow
63+
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b3933a;&quot;&gt;2
64+
&lt;&#x2F;span&gt;&lt;span&gt;reddish
65+
&lt;&#x2F;span&gt;&lt;span&gt;brown
66+
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
67+
&lt;p&gt;&lt;strong&gt;Video demo&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
68+
&lt;p align=&quot;center&quot;&gt;&lt;iframe width=&quot;560&quot; height=&quot;315&quot; loading=&quot;lazy&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;W7LvN7X6Rfg&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;&lt;&#x2F;p&gt;
69+
&lt;br&gt;
70+
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;info.svg&quot; alt=&quot;info&quot; &#x2F;&gt; See also my &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;learnbyexample&#x2F;learn_gnused&quot;&gt;GNU sed&lt;&#x2F;a&gt; ebook.&lt;&#x2F;p&gt;
71+
</content>
72+
</entry>
1073
<entry xml:lang="en">
1174
<title>Python tip 24: modifying list using insert and slice</title>
1275
<published>2023-02-28T00:00:00+00:00</published>

Diff for: sitemap.xml

+5-1
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@
413413
</url>
414414
<url>
415415
<loc>https://learnbyexample.github.io/tips/</loc>
416-
<lastmod>2023-02-28</lastmod>
416+
<lastmod>2023-03-07</lastmod>
417417
</url>
418418
<url>
419419
<loc>https://learnbyexample.github.io/tips/cli-tip-1/</loc>
@@ -479,6 +479,10 @@
479479
<loc>https://learnbyexample.github.io/tips/cli-tip-23/</loc>
480480
<lastmod>2023-02-10</lastmod>
481481
</url>
482+
<url>
483+
<loc>https://learnbyexample.github.io/tips/cli-tip-24/</loc>
484+
<lastmod>2023-03-07</lastmod>
485+
</url>
482486
<url>
483487
<loc>https://learnbyexample.github.io/tips/cli-tip-3/</loc>
484488
<lastmod>2022-06-14</lastmod>

0 commit comments

Comments
 (0)