This content originally appeared on DEV Community and was authored by cloudsky13
INTRODUCTION
Sed, short for “Stream Editor” has been around for a while, generally used to replace specific string values in a file with another.
Well, that sounds straight forward, why not use the replace function available in text editors though?
Of course, you can, but automating this simple task makes it much more efficient, especially in case you need to update a bunch of files.
You’ll see how, in just a bit. Let’s get you familiar with the syntax first.
Syntax
The syntax is pretty basic:
• sed 's/pattern/replacement/g' <filename>
The above command replaces pattern
with replacement
in
the file and prints the output in console.
The letter s
stands for substitute.
The letter g
stands for globally.
The /
is a delimiter used as a field separator.
The above syntax is mostly used to view the output of the
sed command before implementing it.
• sed -i 's/pattern/replacement/g' <filename>
The -i
option tells sed to update the file in place. You
can check out other options available with sed using sed -
.
-help
TIP
If your pattern
or replacement
contains /
, like in a URL, there can be undesired outputs or errors too.
To avoid that, you can simply use \\
before the /
. This treats the /
as a normal character and not a delimiter.
PRO TIP
You can use any other character as a delimiter as long as it doesn’t appear in the pattern or replacement.
For example:
sed -i 's|pattern|replacement|g' <filename>
, works perfectly fine.
Advanced Usage: Capture Groups in sed
Capture groups are used to define portions of a regular expression (Regex) that can be captured and stored for later use.
If you’re unfamiliar with Regex, don’t worry, I’ll cover the example used here. You can read more about it here
Capture Groups are defined using parenthesis () which enclose the text/pattern to be captured.
Let’s see a simple scenario below:
Say I have a file sample.txt with the below data:
name: James Bond
Now I need to update it as shown below:
The name is Bond, James Bond.
One can achieve the desired state using sed command in combination with Regex:
sed -i 's/\(.*\): \(.*\)/The \1 is Bond, \2./g' sample.txt
Comparison with standard syntax:
sed -i 's/pattern/replacement/g' <filename>
• pattern = (.): (.)
\(.*):
collects all data present before :
and maps it to \1
, (i.e. \1=“name”.)
\(.*\)
collects all data present after :
and maps it to \2
, (i.e. \2=“James Bond”.)
• replacement = The \1
is Bond, \2
.
CONCLUSION
• Sed command is lightweight and efficient.
• It’s compatibility with Regex makes complex text manipulation eazy-peezy lemon squeezy.
• It provides the option of in-place editing instead of creating a new copy.
• Easy integration with automation scripts, eliminating the monotony.
Well, it’s all SED and done now.
Congratulations!!
We’ve successfully scratched the surface of the above "said" command.
(Pun-o-meter at 2 now)
But I hope this blog post enables you to envision some real-life use cases of sed.
So, tell me...
What could be a good problem statement to solve using sed?
(Cue for another blog? May be…)
Thanks for making it till the end. Drop a feedback below.
This content originally appeared on DEV Community and was authored by cloudsky13
cloudsky13 | Sciencx (2023-04-26T18:07:37+00:00) Eliminate the Monotony: Automation with sed.. Retrieved from https://www.scien.cx/2023/04/26/eliminate-the-monotony-automation-with-sed/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.