Abstract
sed is a popular utility which enables quick parsing and transformation of text.
Sed command 5#
Overview#
sed is a popular utility which enables quick parsing and transformation of text.
Here are some very simple examples of sed in action.
Examples#
Substitute the first occurrence of ‘editor’ with ‘tool’.
echo "My favorite programming editor is Emacs. Another editor I like is Vim." | sed -e s/editor/tool/
# ---
# My favorite programming tool is Emacs. Another editor I like is Vim.
Substitute all the occurrences of ‘editor’ with ‘tool’.
echo "My favorite programming editor is Emacs. Another editor I like is Vim." | sed -e s/editor/tool/g
# ---
# My favorite programming tool is Emacs. Another tool I like is Vim.
Substitute the second occurrence of ‘editor’ with ‘tool’.
echo "My favorite programming editor is Emacs. Another editor I like is Vim." | sed -e s/editor/tool/2
# ---
# My favorite programming editor is Emacs. Another tool I like is Vim.
Highlight all the occurrences of ‘editor’ by wrapping them up in brace brackets.
echo "My favorite programming editor is Emacs. Another editor I like is Vim." | sed -e s/editor/{\&}/g
# ---
# My favorite programming {editor} is Emacs. Another {editor} I like is Vim.
References#
Some references for learning about sed have been included:
Task#
Given an input file, with \(N\) credit card numbers, each in a new line, your task is to reverse the ordering of segments in each credit card number. Assume that the credit card numbers will have 4 space separated segments with 4 digits each.
If the original credit card number is 1434 5678 9101 1234
,
transform it to 1234 9101 5678 1434
.
Useful References:
This particular page on StackOverflow has a relevant example about sed, groups and back references. Here’s a detailed tutorial covering groups and back references.
Input Format#
\(N\) credit card numbers, each in a new line, credit card numbers will have 4 space separated segments with 4 digits each.
Constraints#
However, the value of \(N\) does not matter while writing your command.
Output Format#
\(N\) lines, each containing a credit card number with the ordering of its segments reversed.
Sample Input#
1234 5678 9101 1234 2999 5178 9101 2234 9999 5628 9201 1232 8888 3678 9101 1232
Sample Output#
1234 9101 5678 1234 2234 9101 5178 2999 1232 9201 5628 9999 1232 9101 3678 8888
Explanation#
The order of the four segments in the (input) credit card numbers have been reversed.
Solution#
This problem is solved easily with some groups and back references.
#!/usr/bin/env bash
# shellcheck disable=SC2162
sed -e 's/\([0-9]\{4\}\) \([0-9]\{4\}\) \([0-9]\{4\}\) \([0-9]\{4\}\)/\4 \3 \2 \1/' -
Section author: Xander Harris xandertheharris@gmail.com