1

ファイル内の特定のパターンを正規表現などと一致させる方法を見つけようとしています。[0-9]を使用して0〜9の任意の数字を検索できることは知っていますが、特定の数字のみを取得するにはどうすればよいですか?たとえば、0〜14が必要ですが、16〜60は無視します。

この情報はファイルの最初の列(つまり、awk'{print $ 1}')でのみ検索しており、これにもアスタリスク(*)を含める必要があります(crontab)。

これに関する助けをいただければ幸いです(そしてこれを説明するドキュメントへのリンク-私はこの種の問題をカバーするものを見つけることができませんでした)。

ありがとう

編集:要求に応じて、これが私が探しているもののサンプルです。

2つのcronジョブ:

*/5 * * * * /bin/bash /some/path/script.sh
20 * * * * /bin/bash /home/path/script2.sh

最初のものをピックアップし、2番目のものは無視する必要があります。/ var / spool / cron /から読んでいるので、出力を次のようにします。

filename
<cron job here>
filename2
<cron job here>
<other cron job here>

私は自分でそれを解決することを計画していました、しかしこれはあなたに私が何をしようとしているのかについての考えを与えます。

4

3 に答える 3

1

正規表現は、数値範囲のマッチングがかなり苦手です。代わりに awk を使用できます。

crontab -l | awk '$1 == "*" || $1 ~ /^[0-9]+$/ && $1 < 15 {print}'

分の部分が * または 0-14 であるすべての crontab エントリを表示します。

于 2013-02-01T21:49:04.073 に答える
0

以下の crontab から $line に各行を取得するビットを除外すると、これにより、必要な種類の結果が生成される可能性があります (*/20 と 20 の両方が、あなたに関する限り 14 を超えると想定しています。つまり、テストします)。数字部分のみ)。

  number="${line%% *}"  # Remove everything from 1st space to right end
  if [ -n "$number" ] ; then
    line="${number//[!0-9]/}"  # Lose anything non-numeric
    if (( ${number:-0} <= 14 )) ; then
      echo "$line"
    fi
  fi

$line が空白ではない、またはすべてのスペースが入っていることを保証する場合は、外側の if は必要ありません。

于 2013-02-01T23:17:46.830 に答える