2014-09-08 2 views
4

Как я могу grep asterisk * внутри текстового файла? Вот мой код:Может ли bash grep «*» вместо « *»?

if grep -F "\#$minute $hour $date $month $day $cr_user $comm" filecron; then 
     echo "$minute $hour $date $month $day $cr_user $comm" > /dev/null 2>&1 
     echo "data exist" 

elif [[ -z $minute || -z $hour ]]; then 
     echo "#$minute $hour $date $month $day $cr_user $comm" > /dev/null 2>&1 
     echo "nothing to input" 
     echo "" >> filecron 

elif [[ $stat == "inactive" ]]; then 
     echo "\#$minute $hour $date $month $day $cr_user $comm" >> filecron 
     echo "input data inactive to filecron" 

else 
     echo "$minute $hour $date $month $day $cron_user $comm" >> filecron 
     echo "input data active to filecron" 

fi 

Здесь filecron содержат

#30 07 03 09 RAB root bash /media/data/once.sh > /dev/null 2>&1 
#* * * * * root bash /media/data/looping.sh > /dev/null 2>&1 
#56 * * * * root bash /media/data/minutely.sh /dev/null 2>&1 
#43 * * * * root bash /media/data/hourly.sh > /dev/null 2>&1 
#54 11 * * * root bash /media/data/daily.sh /dev/null 2>&1 
#00 12 * * RAB root bash /media/data/weekly.sh > /dev/null 2>&1 
#30 20 15 * * root bash /media/data/monthly.sh > /dev/null 2>&1 
#45 21 01 09 * root bash /media/data/yearly > /dev/null 2>&1 
#15 16 31 08 MIN root bash /media/data/other.sh > /dev/null 2>&1 
#30 07 * * * root bash /media/data/daily2.sh > /dev/null 2>&1 
#30 10 * * * root bash /media/data/daily3.sh > /dev/null 2>&1 
#45 17 17 * * root bash /media/data/monthly2.sh > /dev/null 2>&1 
#00 18 * * SAB root bash /media/data/weekly2.sh > /dev/null 2>&1 

#30 07 03 09 RAB root bash /media/data/once.sh > /dev/null 2>&1 
#* * * * * root bash /media/data/looping.sh > /dev/null 2>&1 
#56 * * * * root bash /media/data/minutely.sh /dev/null 2>&1 
#43 * * * * root bash /media/data/hourly.sh > /dev/null 2>&1 

Но grep не работает, если $minute или $hour или $month или $day или $date является * Итак, как я это делаю ?

ответ

7

Если у вас нет каких-либо регулярных выражений, и просто хочу, чтобы соответствовать строке точно, используйте -F опцию grep (или старую fgrep команду):

if grep -F "#$minute $hour $date $month $day $cr_user $comm" filecron; then 
+0

Я пробовал, но переменная все еще перенаправляется в файл. Он не должен перенаправляться в файл после grep. Вот пример файла. # 30 ($ minute) 15 ($ hour) * ($ date) * ($ month) MON ($ day) root ($ cr_user) bash /media/data/test1.sh>/dev/null 2> & 1 ($ comm) # * * * * * root bash /media/data/test2.sh>/dev/null 2> & 1 Как насчет этого? Как мне написать grep-код? –

+0

Я не понимаю ваш вопрос. В этом вопросе нет перенаправления на файл. Это просто повторяет '/ dev/null', но я не понимаю, почему. – Barmar

+0

Пожалуйста, обновите свой вопрос с примера содержимого 'filecron' и значений всех переменных. – Barmar