GästebuchIhr Eintrag in unser Gästebuch KontaktNehmen Sie Kontakt mit den Autoren auf ArchivAlle Unixwerk- Artikel seit 2003
17. August 2016

Tipp: Bereich aus einer Textdatei ausschneiden mit sed

Inhalt

  1. Ausschneiden mit sed
  2. Das Ganze als Skript

Ausschneiden mit sed

So lässt sich mit sed alles ausgeben, das sich zwischen dem ersten Auftreten des Wortes "start" und dem letzten Auftreten des Wortes "end" befindet:

$ sed -n '/start/,/end/p' file

oder

$ command | sed -n '/start/,/end/p'

Statt "start" und "end" können alle regulären Ausdrücke verwendet werden, die sed kennt.

Das Ganze als Skript

Wir erstellen ein kleines Shellskript schnipp.sh:

#!/bin/ksh
MYNAME=${0##*/}

fhelp()
{
printf "\n Usage: $MYNAME -b <PATTERN> -e <PATTERN>   <FILE1> [ <FILE2> [ <FILE3> [ ... ] ] ]\n\n"
}

while (($#>0))
do
  case "$1" in
    -b)
        case "$2" in
        "-"*|"")  fhelp ; exit 1 ;;
               *)  _begin="$2" ; shift ; shift ;;
        esac
        ;;

    -e)
        case "$2" in
        "-"*|"")  fhelp ; exit 1 ;;
               *)  _end="$2" ; shift ; shift ;;
        esac
        ;;

    -*)
        fhelp
        exit 1
        ;;

     *)
        [ -f "$1" ] && _files="$_files $1" || { fhelp ; exit 1 ; }
        shift
        ;;
  esac
done

if [ \( -z "$_begin" \) -o \( -z "$_end" \) ]
then
   fhelp
   exit 1
fi

if [ -n "$_files" ]
then
   sed -n "/$_begin/,/$_end/p" $_files
else
   cat - | sed -n "/$_begin/,/$_end/p"
fi

Das Skript wird dann wie folgt aufgerufen:

$ schnipp.sh -b start -e end file

oder

$ command | schnipp.sh -b start -e end