====== sed ====== * [[awk]] * [[grep]] * [[sed examples]] Sed is a string editor program. It can manipulate data using regular expressions. * [[http://www.gnu.org/software/sed/manual/html_node/Invoking-sed.html#Invoking-sed|Invoking sed]] * [[http://www.gnu.org/software/sed/manual/html_node/Examples.html#Examples|Examples]] * [[http://sed.sourceforge.net/sedfaq3.html#s3.2|Common one-line sed scripts]] * [[http://sed.sourceforge.net/grabbag/|seder's grab bag]] * [[http://www.ibm.com/developerworks/linux/library/l-sed2/index.html|Common threads: Sed by example]] * [[http://sed.sourceforge.net/sed1line.txt|One-line scripts for sed]] The basic syntax for sed is ''sed SCRIPT INPUTFILE'' where a SCRIPT is the format used to replace or modify. If you want to pass options, then the format is ''sed OPTIONS SCRIPT INPUTFILE'' Here is a simple example that removes spaces from a string: echo foo bar | sed 's/\ //' # returns foobar In the script, characters that would be parsed by the shell need to be escaped. == Basic syntax == Here are some of the common arguments that will be used. First of all, if you are passing arguments, and not just a script, then you need to specify which argument is the script. The same example as before, using **''-e''** or **''--expression''** would look like this: echo foo bar | sed -e 's/\ //' # returns foobar == Scripting from a file == You can load a script from a file instead of passing it as an expression. The syntax is the same, you still need to escape characters. echo 's/\ //' > /tmp/rules.txt echo foo bar | sed -f /tmp/rules.txt == Edit a file == You can have sed update the file directly: echo foo bar > /tmp/foobar.txt sed -e 's/\ //' /tmp/foobar.txt -i ** BSD / Darwin: ** BSD's version of sed will use an extension given to ''-i'' to create a backup file of the original. So ''sed -i .bar foo'' will create ''foo.bar'' while updating ''foo'' as well. By comparison, GNU sed accepts an optional argument if given directly after the option: ''sed -i.bar''. To workaround the inconsistency, you have two options. Pass an empty character after the option for both: sed -i'' ... Or, pass ''-i'' as the last option: sed ... -i == Regular expressions == If you need to use regular expressions in the same format that egrep does, use **''-r''** as well. == Global replacement == By default, sed will only replace the first occurrence of a match. With a regexp modifier, you can have it do more. Use ''g'' to replace all instances: echo foo bar | sed 's/o//' #returns fo bar echo foo bar | sed 's/o//g' #returns f bar