;;; Gash-Utils ;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2019 Timothy Sample ;;; ;;; This file is part of Gash-Utils. ;;; ;;; Gash-Utils is free software: you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation, either version 3 of the License, or ;;; (at your option) any later version. ;;; ;;; Gash-Utils is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with Gash-Utils. If not, see . * sed-address-search :script: #+begin_src sh input='bar baz bam' echo "$input" | \sed '1,/baz/ s/a/i/' #+end_src :stdout: #+begin_example bir biz bam #+end_example * sed-autoconf-basename :interpreter: "sed" :script: #+begin_src fundamental /^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q #+end_src :stdin: #+begin_example X/foo/bar #+end_example :stdout: #+begin_example bar #+end_example * sed-branch-b :script: #+begin_src sh seq 3 | sed -e ' b skip s/./0/ : skip' #+end_src :stdout: #+begin_example 1 2 3 #+end_example * sed-branch-t :script: #+begin_src sh seq 3 | sed -e ' 2 s/\(.*\)/\1/ : repeat a foo t repeat' #+end_src :stdout: #+begin_example 1 foo 2 foo foo 3 foo #+end_example * sed-case :script: #+begin_src sh echo ooO | \sed s,o,O,i #+end_src :stdout: #+begin_example OoO #+end_example * sed-command-list :script: #+begin_src sh input='foo bar' echo "$input" | \sed '/foo/ { s/foo/baz/ s/baz/bar/ } s/bar/baz/' #+end_src :stdout: #+begin_example baz baz #+end_example * sed-file :script: #+begin_src sh \sed s,foo,bar, tests/data/foo #+end_src :stdout: #+begin_example bar bar baz #+end_example * sed-fooRbar :script: #+begin_src sh \sed s",\r,\n," < tests/data/fooRbar #+end_src :stdout: #+begin_example foo\rbar foo bar #+end_example * sed-global :script: #+begin_src sh echo 001 | \sed s,0,1,g #+end_src :stdout: #+begin_example 111 #+end_example * sed-group-extended :script: #+begin_src sh echo 012 | \sed -r 's,(0)1(2),\21\1,' #+end_src :stdout: #+begin_example 210 #+end_example * sed-group :script: #+begin_src sh echo 012 | \sed 's,\(0\)1\(2\),\21\1,' #+end_src :stdout: #+begin_example 210 #+end_example * sed-insert-text :script: #+begin_src sh input='bar baz bam' echo "$input" | \sed '/baz/ i Generated by Gash' #+end_src :stdout: #+begin_example bar Generated by Gash baz bam #+end_example * sed-once :script: #+begin_src sh echo 001 | \sed s,0,1, #+end_src :stdout: #+begin_example 101 #+end_example * sed-pattern-address :script: #+begin_src sh input='bar baz bam' echo "$input" | \sed '/baz/ s/a/i/' #+end_src :stdout: #+begin_example bar biz bam #+end_example * sed-quit :script: #+begin_src sh input='foo bar' echo "$input" | \sed 's/foo/baz/ ; q ; s/baz/foo/' #+end_src :stdout: #+begin_example baz #+end_example * sed-range :script: #+begin_src sh input='1 bar 2 bar 3 bar 4 bar 5 bar' echo "$input" | \sed '2,4s/a/x/' #+end_src :stdout: #+begin_example 1 bar 2 bxr 3 bxr 4 bxr 5 bar #+end_example * sed-search-dollar :script: #+begin_src sh input='bar baz bam' echo "$input" | \sed -e '/baz/,$ s/a/i/' #+end_src :stdout: #+begin_example bar biz bim #+end_example * sed-search-search :script: #+begin_src sh input='bar baz bla bam' echo "$input" | \sed '/baz/,/bla/ s/a/i/' #+end_src :stdout: #+begin_example bar biz bli bam #+end_example * sed-skip :script: #+begin_src sh input='1 2 3 4 5 6' echo "$input" | \sed 'n;n;s/./x/' #+end_src :stdout: #+begin_example 1 2 x 4 5 x #+end_example * sed-twice :script: #+begin_src sh echo 0001 | \sed -e s,0,1, -e s,0,1, #+end_src :stdout: #+begin_example 1101 #+end_example * sed-undo :script: #+begin_src sh echo 001 | \sed -e s,0,1, -e s,1,0, #+end_src :stdout: #+begin_example 001 #+end_example * sed :script: #+begin_src sh \sed --help #+end_src :stdout: #+begin_example Usage: sed [OPTION]... [SCRIPT] [FILE]... -e, --expression=SCRIPT add SCRIPT to the commands to be executed -E, -r, --regexp-extended use extended regular expressions in the script -f, --file=SCRIPT add contents of SCRIPT to the commands to be executed -h, --help display this help -i, --in-place edit files in place -s, --separate process each file independently -n, --quiet only write explicitly selected output -V, --version display version #+end_example * sed-pattern-escapes :script: #+begin_src sh sed 's,\@program_transform_name\@,s@x@boo-x@,' #+end_src :stdin: #+begin_example transform = @program_transform_name@ #+end_example :stdout: #+begin_example transform = s@x@boo-x@ #+end_example * sed-replace-escapes :script: #+begin_src sh sed 's,@program_transform_name\@,s\,x\,x\d\n\d\,,' #+end_src :stdin: #+begin_example transform = @program_transform_name@ #+end_example :stdout: #+begin_example transform = s,x,xd d, #+end_example * sed-replace-escapes-2 :script: #+begin_src sh sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' #+end_src :stdin: #+begin_example s,@program_transform_name@,s,x,x,,;t t s,@AMDEPBACKSLASH@,\,;t t #+end_example :stdout: #+begin_example s,@program_transform_name@,s\,x\,x\,,;t t s,@AMDEPBACKSLASH@,\\,;t t #+end_example * The ~n~ function respects the quiet (~-n~) option :script: #+begin_src sh echo foo | sed -n n #+end_src :stdout: "" * The ~n~ function works on the last line :script: #+begin_src sh echo foo | sed n #+end_src :stdout: #+begin_example foo #+end_example * Allows repeating range addresses :interpreter: "sed" :script: "/a/,/z/d" :stdin: #+begin_example 1 a 2 z 3 a 4 z 5 #+end_example :stdout: #+begin_example 1 3 5 #+end_example * Stops processing files after ~q~ :script: #+begin_src sh sed -e '2q' -- tests/data/foo tests/data/fooRbar #+end_src :stdout: #+begin_example foo bar #+end_example