2017-05-09 4 views
0

Ich habe Protokolldateien, die nach dem Datum gekennzeichnet werden. Ich möchte nur den Tag aus dem Protokoll extrahieren. So meine Protokolle sindUnix - Aus einer Zeichenfolge abgeschnitten

server01.log-2017-05-08.gz 
server00152.log-2017-05-08.gz 

Wie extrahieren wir nur aus der Datei. Ich versuchte

echo "www1-ssl-access.log-2017-05-07.gz" | rev | cut -d"-" -f1 | rev 

aber es extrahieren 08.gz, die ich nicht will. Ich brauche nur aus der Datei. Wie würde ich das machen? Kann mir jemand helfen?

+0

Auch, die Ihre Frage Geschichte widerspiegeln, sollten Sie lesen [this] (http://stackoverflow.com/help/someone-answers), –

Antwort

0

hinzufügen Sie können eine bis zum Ende sed die .gz

echo "www1-ssl-access.log-2017-05-07.gz" | rev | cut -d"-" -f1 | rev | sed -e 's/.gz//' 
2

Sie könnten verwenden AWK wie folgt zu entfernen:

echo "www1-ssl-access.log-2017-05-07.gz" | awk -F'[-.]' '{ print $(NF - 1) }' 
0

Bash nur:

$ i="www1-ssl-access.log-2017-05-07.gz" # set to var i 
$ j=${i##*-}        # remove from last - to beginning 
$ echo ${j%%.*}       # remove from first . to end and echo 
07 
0

Sie können Verwenden Sie sed und erinnern Sie sich an einen Teil zwischen \( ans \):

echo "www1-ssl-access.log-2017-05-07.gz" | sed 's/.*-\([^.]*\)\.gz/\1/' 

Sie können den sed Befehl entsprechend den Variationen Ihrer Eingabe ändern. Wenn die Datei nicht komprimiert ist, möchten Sie möglicherweise trotzdem die Nummer abrufen.

printf "%s\n" "www1-ssl-access.log-2017-05-07" "www1-ssl-access.log-2017-05-07.gz" | 
    sed 's/.*-\([^.]*\).*/\1/' 
Verwandte Themen