17. August 2016
Tipp: Bereich aus einer Textdatei ausschneiden mit sed
Inhalt
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 -bstart
-eend
file
oder
$command
| schnipp.sh -bstart
-eend