====== Sed ======
**General Information**
Stream editor tips and tricks.
**Checklist**
* Distro(s): Any
* Package: 'sed' package installed
----
====== Print Lines ======
Different ways to print specific lines.
Print only line 5 pattern spacesed -n '5p' /etc/passwd
* -n => silent; do not print the entire file
Line 5, don't delete itsed '5!d' /etc/passwd
* !d => don't delete
Print up to line 5, quit and delete the rest of the outputsed '5q;d' /etc/passwd
* q => quit/stop processing more input
* d => delete the pattern space (removes all but line 5 from output)
----
====== Swap Patterns ======
Edit files by swapping pattern spaces.
* Beforecat /etc/resolv.conf
# Generated by NetworkManager
search local
nameserver 208.67.222.222
nameserver 208.67.220.220
* Aftersed -i 's/208.67.222.222/8.8.8.8/g' /etc/resolv.conf
# Generated by NetworkManager
search local
nameserver 8.8.8.8
nameserver 208.67.220.220
* -i => In-line editing
* s => swap
* g => global swap (swap every match, not just the first one)
----
====== Insert Lines ======
Insert lines before a found matched pattern.
Given the contents of /etc/resolv.conf:
# Generated by NetworkManager
nameserver 192.168.1.254
Insert a new DNS entry that will be checked first:
sed -i '/nameserver/ i\nameserver 8.8.8.8' /etc/resolv.conf
* /nameserver/ => pattern to match
* -i => in-line editing (changes the file in place)
* i\ => insert
Results in:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 192.168.1.254
===== Insert at first line =====
Insert also works against line numbers.
Insert a new comment at line 1:
sed -i '1 i\# My first line comment' /etc/resolv.conf
Results in:
# My first line comment
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 192.168.1.254
----
====== Append Lines ======
Append lines after a found matched pattern.
Given the contents of /etc/resolv.conf:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 192.168.1.254
Append a new DNS entry that will be checked 2nd:
sed -i '/nameserver 8.8.8.8/ a\nameserver 8.8.4.4' /etc/resolv.conf
Results in:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.1.254
----
====== Remove Lines ======
Remove lines that match a pattern.
Given /etc/resolv.conf:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.1.254
Remove the 8.8.4.4 entry:
sed -i '/8.8.4.4/d' /etc/resolv.conf
Results in:
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 192.168.1.254
----