2017-05-09 16 views
0

私は日付でラベル付けされているログファイルを持っています。私はログからその日だけを抽出したいと思います。だから私のログは私だけファイルから抽出するにはどうすればよいUnix - 文字列から切り取る

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

です。試しました

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

しかし、私はしたくない08.gzを抽出します。私はファイルからが必要です。これをどうやってやりますか?誰か助けてくれますか?

+0

質問履歴を反映して、[this](http://stackoverflow.com/help/someone-answers)を読んでください。 –

答えて

0

あなたはこのようにAWKを使用することができ.gzを

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

を取り除くために最後にsedを追加することができます唯一の

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

バッシュ:

$ 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

することができますがsedを使用し、\(の部分とans \)の部分を覚えている:

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

入力のバリエーションに応じてsedコマンドを変更できます。 ファイルが圧縮されていない場合でも、番号を取得することができます。

printf "%s\n" "www1-ssl-access.log-2017-05-07" "www1-ssl-access.log-2017-05-07.gz" | 
    sed 's/.*-\([^.]*\).*/\1/' 
関連する問題