[Linux-Biella] estrarre del testo da un file

Daniele Segato daniele.bilug a gmail.com
Mar 10 Ago 2010 22:03:31 CEST


Il giorno mar, 10/08/2010 alle 20.58 +0200, Federico "Darkmagister"
Pietta ha scritto:
> salve
> io avrei bisogno, preso un file conosciuto e di cui conosco circa il
> contenuto, recuperare un determinato testo compreso fra due parti di codice.
> 
> esempio
> 
> testo1
> testo2
> ##########
> testo3
> testo4
> ##########
> testo5
> 
> in bash vorrei poter recuperare in una variabile o in un altro file il
> testo fra i due limitatori
> 
> quindi :
> testo3
> test4
> 
> nel file potrei avere più occorrenze del limitatore, a me interessa
> prendere l'ultima e la penultima....
> 
> ho provato con grep ma con scarsi risultati, preso debba unirlo ad altri
> comandi.
> 
> qualcuno sa come aiutarmi ??

bash non è molto adatto a questo particolare scopo.. meglio perl...
anche con awk qualcosina la si fa
sed qui penso possa aiutarti poco

però se proprio ti serve sh, bash o simile questo script fa quel che ti
serve (scritto or ora)

#!/bin/sh

if [ ! -r "$1" ] ; then
  echo "$1 is not a regular file" >&2;
  exit 1;
fi

# first argument is the file
cat "$1" |
# group the commands to avoid the "pipeline disappearing variable issue"
# see http://mywiki.wooledge.org/BashFAQ/024
{
  while read line; do
    if [ "$line" = '##########' ] ; then
      # found delimiter going to next content
      CONTENT="$NEXT_CONTENT";
      NEXT_CONTENT='';
    else
      # adding a line to NEXT_CONTENT
      if [ "$NEXT_CONTENT" = '' ] ; then
        NEXT_CONTENT="$line";
      else
        # keep the new line
        NEXT_CONTENT="$NEXT_CONTENT
$line";
      fi
    fi
  done

  # double quotes are needed
  echo "$CONTENT";
}

ciao,
Daniele



Maggiori informazioni sulla lista Linux