Nowe posty

Autor Wątek: [grep, awk] usuwanie cudzysłowiów  (Przeczytany 1985 razy)

  • Gość
[grep, awk] usuwanie cudzysłowiów
« dnia: 2007-01-09, 15:55:13 »
Witam.

Mam małe pytanko odnoście operowania na napisach w Bashu. Zrobiłem już troche z mini skryptu, ale jednak brakuje mi jednego elementu :-) I właśnie prośba moja dotyczy podpowiedzi jak ten fragment napisać.

Do rzeczy. Mam w pliku cpp spisane wersje programu i date modyfikacji. Wygląda to tak:
const char* meta[][2] =    {
                     { ".version", "0.0.1" },
                     { ".date", "9.I.2007" },
                     { ".status", "Total Alpha" },
                     { ".name", "Glossalia Compiler" },
                     { NULL, NULL }
               };

Skrypt który skrobę, tworzy archiwum ze źródłami projektu. Jednak chcę aby dodawał numer wersji i datę do nazwy pliku archiwum :-)

Tako więc wyciągam wersje i datę:

VERSION=`grep '".version"'  ../../sources/src/tools/compiler/compiler-slots.cpp  | awk '{print $3}'`
DATE=`grep '".date"'  ../../sources/src/tools/compiler/compiler-slots.cpp  | awk '{print $3}'`

Jednak wynikiem jest "0.0.1" i "9.I.2007" czyli z cudzysłowiami.

Może mi ktoś pomóc pozbyć się ich :-D?

Pozdrawiam

chmooreck

  • Gość
[grep, awk] usuwanie cudzysłowiów
« Odpowiedź #1 dnia: 2007-01-09, 18:22:46 »
na przykład możesz dodać:
| sed 's/"([.0-9]+)"/1/'
albo zastąpić awk przez:
| sed 's/.*"([.0-9]+)".*/1/'
zapewne mozna jeszcze prościej ;-)

  • Gość
[grep, awk] usuwanie cudzysłowiów
« Odpowiedź #2 dnia: 2007-01-09, 18:30:44 »
2007-01-09 18:22:46 chmooreck napisał:

> na przykład możesz dodać:
 > | sed 's/"([.0-9]+)"/1/'
 > albo zastąpić awk przez:
 > | sed 's/.*"([.0-9]+)".*/1/'
 > zapewne mozna jeszcze prościej ;-)

Dzięki :-)

Dodałem IVX, żeby mi miesiące wykrywało :-)

VERSION=`grep '".version"'  ../../sources/src/tools/compiler/compiler-slots.cpp   | awk '{print $3}' | sed 's/"([.0-9]+)"/1/'`
DATE=`grep '".date"'  ../../sources/src/tools/compiler/compiler-slots.cpp  | awk '{print $3}' | sed 's/"([.0-9IVX]+)"/1/'`

------------------------------------------------------------------------

Jeszcze jedna sprawa. Nie wiem jak ten skrypt przenieść z pliku .sh do Makefile :| Poprostu nie działa przyrówanie VERSION=`grep...`. Kod

sh build-archive.sh:

echo "Creating archive:"
        DIR=`pwd`
   VERSION=`grep '".version"'  ../../sources/src/tools/compiler/compiler-slots.cpp  | awk '{print $3}' | sed 's/"([.0-9]+)"/1/'`
   DATE=`grep '".date"'  ../../sources/src/tools/compiler/compiler-slots.cpp  | awk '{print $3}' | sed 's/"([.0-9IVX]+)"/1/'`
   echo ""   
   echo "    Version: "$VERSION
   echo "    Date: "$DATE
   echo "    File name: Glossalia-"$VERSION"-("$DATE").tar.gz"
   echo ""
   cd $DIR
   cd ../../../
   tar cvfz "./Glossalia/Glossaloa-"$VERSION"-("$DATE").tar.gz" Glossalia
   cd $DIR
   echo ""
   echo "    Archive has been created :-)"
   echo ""

Jak to można wrzucić do Makefile? Powstaje mi ciągle puste VERSION i Date...

EDIT :-) -------------------------------------
Problem polega na umieszczeniu skryptu basha w Makefile :| Nie ce działać :D
rp: for i in `find ./ -name '~*'`; do rm -f $i ; done

Pozdrawiam

xis

  • Gość
[grep, awk] usuwanie cudzysłowiów
« Odpowiedź #3 dnia: 2007-01-10, 08:00:39 »
Makefile to nie skrypt, a jedynie zbiór deklaracji dla polecenia 'make', toteż nie możesz pisać w nim skryptów. Ale możesz je wykonywać :)
W pliku Makefile możesz wykonywać polecenia tylko w sekcjach dotyczących reguł budowania. np:

all:
@echo "Działamy"
@./skrypt

Znaki małpki są tu dodane po to, by nazwa polecenia nie wyświetlała się na ekranie.