Mastering sed and expect: Powerful One‑Liner Tricks for Linux Automation
This guide introduces the Linux stream editor sed and the automation tool expect, covering essential options, line‑based editing, pattern matching, backup strategies, substitution techniques, grouping, practical exercises, non‑interactive input methods, and expect scripting fundamentals for automating interactive shell sessions.
sed
sed works on lines of a file and can modify file contents without opening the file.
Typical syntax:
sed [options] ... {script} filenameKey options:
-i: edit files in place.
-i.bak: edit in place and create a backup with a
.bakextension.
-n: suppress automatic printing.
-r: use extended regular expressions.
-p: print.
-q: quit early (e.g.,
3qprints up to line 3 then exits).
-d: delete (e.g.,
3ddeletes line 3).
-a: append after a line (e.g.,
3a text).
-i: insert before a line (e.g.,
3i text).
-c: change a line (e.g.,
3c new).
=: print line numbers.
Examples:
Extract odd lines:
sed -n '1~2p'or
sed -n 'p;N;D'.
Extract even lines:
sed -n '2~2p'.
Print lines between two patterns (e.g., between lines starting with
band
f).
Replace text:
s/old/new/g(or using alternate delimiters
s#old#new#g,
s@old@new@g).
Modifiers:
g(global),
p(print matched lines),
w file(write matched lines to a file),
i/
I(ignore case).
Backup before editing:
sed -i.bak 's/SELINUX=enforcing/SELINUX=enable/' file.
Search and replace
Standard form:
s/old/new/flags. Alternate delimiters (
#,
@) can be used to avoid escaping characters.
Replacement exercise
Replace
SELINUX=enforcingwith
SELINUX=enablein a file, remembering to create a backup with
-i.bak.
Group reference
Only extended regular expressions support grouping.
Example pattern to capture an IP address:
/inet[[:space:]]+([0-9.]+)/where the part in parentheses is the captured group.
Exercise 1
Extract the IP address from network interface output using a pattern like
/inet[[:space:]]+([0-9.]+)/.
Exercise 2
Extract the numeric part of a version string by using
-as a delimiter and capturing the portion before
.jar.
Exercise 3
Extract the numeric permission bits from a file permission string using a suitable regular expression.
Non‑interactive input
Multi‑line redirection example:
<code>cat >target_file <<EOF
line1
line2
EOF</code>This writes multiple lines to
target_filein one command.
expect
Expect solves interactive prompts in shell scripts by automating input.
Installation:
yum install expect -yKey keywords:
spawn: start a program.
expect: wait for a pattern.
exp_continue: continue expecting after a match.
send: send input to the spawned program.
interact: hand control back to the user.
set: define variables.
Expect scripts must start with
#!/usr/bin/expect, not a bash shebang.
Raymond Ops
Linux ops automation, cloud-native, Kubernetes, SRE, DevOps, Python, Golang and related tech discussions.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.