2017-03-12 10 views
0

ファイル番号が/tmp/gish.datで、数字(0以上、1桁以上)または何も含まれていません。Bashの正規表現が内部に一致しない場合

数字がある場合は、#と番号(たとえば#64)を返すように機能します。数字がない場合は、私の機能が何もしないようにしたい。

get_issue() { 
     if [ -f "/tmp/gish.dat" ] 
     then 
      iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+') 
      if [[ iss =~ '[0-9]+' ]] 
      then 
       echo "#$iss" 
      fi 
     fi 
    } 

なんらかの理由で、内側のifが決して一致しません。非常にbashに新しい。

+3

あなたはドルが不足していると思うチェックアウトシンボルを変数に追加します。 if条件で$ issに変更します。 – benjamin

+0

外側のifが正しく動作すると仮定して、シェル呼び出し(iss)の結果を出力し、正しく動作しているかどうかを確認してください。編集:ベンジャミンが既に言及したように、あなたがドル記号を紛失していることを確かめてください。 –

+0

もしファイルが空であるかどうかをテストするために-sオプションを見ることをお勧めします:) – grail

答えて

2

あなたは、このようにコードを書き換えることができます。grep -Eo抽出ちょうど一致する数字の一部が

get_issue() { 
     if [ -f "/tmp/gish.dat" ] 
     then 
      iss=$(grep -Eo '[0-9]+' /tmp/gish.dat) 
      if [[ $iss ]] 
      then 
       echo "#$iss" 
      fi 
     fi 
    } 

ifに再び正規表現に対して抽出された文字列と一致する必要はありません。 $issが空でない場合は、[[ $iss ]]は真です。

+0

ありがとうございます。 – JMurphyWeb

4

正規表現を[[...]]に入力すると、文字列になります。

'[0-9]+'[0-9]+で置き換えます。

0

あなたは#64のようなものを印刷する必要がある場合には、#45など以下のようにコードを変更、

if [ -f "/tmp/gish.dat" ] 
    then 
     iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+' | tr '\n' ' ') 
     for isss in $iss  
     do 
       if [[ $isss =~ '[0-9]+' ]] 
       then 
        echo "#$isss" 
       fi 
     done; 

はFiの

この1

関連する問題