Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 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 space<code bash>sed -n '5p' /etc/passwd</code> * -n => silent; do not print the entire file Line 5, don't delete it<code bash>sed '5!d' /etc/passwd</code> * !d => don't delete Print up to line 5, quit and delete the rest of the output<code bash>sed '5q;d' /etc/passwd</code> * 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. * Before<code bash>cat /etc/resolv.conf # Generated by NetworkManager search local nameserver 208.67.222.222 nameserver 208.67.220.220</code> * After<code bash>sed -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</code> * -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: <code bash> # Generated by NetworkManager nameserver 192.168.1.254 </code> Insert a new DNS entry that will be checked first: <code bash> sed -i '/nameserver/ i\nameserver 8.8.8.8' /etc/resolv.conf </code> * /nameserver/ => pattern to match * -i => in-line editing (changes the file in place) * i\ => insert Results in: <code bash> # Generated by NetworkManager nameserver 8.8.8.8 nameserver 192.168.1.254 </code> ===== Insert at first line ===== Insert also works against line numbers. Insert a new comment at line 1: <code bash> sed -i '1 i\# My first line comment' /etc/resolv.conf </code> Results in: <code bash> # My first line comment # Generated by NetworkManager nameserver 8.8.8.8 nameserver 192.168.1.254 </code> ---- ====== Append Lines ====== Append lines after a found matched pattern. Given the contents of /etc/resolv.conf: <code bash> # Generated by NetworkManager nameserver 8.8.8.8 nameserver 192.168.1.254 </code> Append a new DNS entry that will be checked 2nd: <code bash> sed -i '/nameserver 8.8.8.8/ a\nameserver 8.8.4.4' /etc/resolv.conf </code> Results in: <code bash> # Generated by NetworkManager nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 192.168.1.254 </code> ---- ====== Remove Lines ====== Remove lines that match a pattern. Given /etc/resolv.conf: <code bash> # Generated by NetworkManager nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 192.168.1.254 </code> Remove the 8.8.4.4 entry: <code bash> sed -i '/8.8.4.4/d' /etc/resolv.conf </code> Results in: <code bash> # Generated by NetworkManager nameserver 8.8.8.8 nameserver 192.168.1.254 </code> ---- linux_wiki/sed.txt Last modified: 2019/05/25 23:50(external edit)