Sed: Difference between revisions
From Leo's Notes
This page was last edited on 24 February 2017, at 19:13.
m Text replacement - "{{highlight|lang=bash" to "{{highlight|lang=terminal" |
m Text replacement - "<code>" to "{{code|" |
||
| Line 3: | Line 3: | ||
== Modifying a File Directly == | == Modifying a File Directly == | ||
Using the above tips, you can modify a file directly by using the | Using the above tips, you can modify a file directly by using the {{code|-i</code> parameter, with the filename as the second argument: | ||
sed -i "search" /path/to/file | sed -i "search" /path/to/file | ||
| Line 30: | Line 30: | ||
== Inserting a Line Before/After a Match == | == Inserting a Line Before/After a Match == | ||
Use: | Use: {{code|0,/<regex>/s//<replacement text where \0 is the found line>/</code> | ||
# Add a password line before the first title entry in the grub.conf file. | # Add a password line before the first title entry in the grub.conf file. | ||
sed -i "0,/^title/s//password --encrypted $Password\n\n\0/" $GrubConfig | sed -i "0,/^title/s//password --encrypted $Password\n\n\0/" $GrubConfig | ||
Revision as of 19:13, 24 February 2017
Modifying a File Directly
Using the above tips, you can modify a file directly by using the {{code|-i parameter, with the filename as the second argument:
sed -i "search" /path/to/file
Simple search / replace
Global search and replace:
sed 's/<search>/<replace>/g'
To replace only the first match:
sed '0,/<search>/s//<replace>/'
Remove HTML tags
sed -e 's/<[^>]*>//g' <file>
Remove File Extensions
sed 's/\(.*\)\..*/\1/'
eg:
echo "house.txt" | sed 's/\(.*\)\..*/\1/' # returns 'house'
Delete Matching Line
sed '/someline/d'
Inserting a Line Before/After a Match
Use: {{code|0,/<regex>/s//<replacement text where \0 is the found line>/
# Add a password line before the first title entry in the grub.conf file. sed -i "0,/^title/s//password --encrypted $Password\n\n\0/" $GrubConfig
To append after, just put \0 before your replacement text.
Grap Specific Section using Regex
To grab a specific section of a string, for instance '3' in 'Server time offset: 3':
echo 'Server time offset: 3' | sed -n -e 's/.*: \([0-9]*\)/\1/p'
This can also be done with grep, though it isn't regex:
echo 'Server time offset: 3' | /bin/grep -ohE '[0-9]*'
Join Every Other Line
To join every other line, useful for making key:value pairs, use:
'$!N;s/\n/ /'