2015-06-17 5 views
1

У меня есть текстовый файл, содержащий список задач, и каждый раз, когда я хочу добавить задачу, я должен проверить, существует ли она в текстовом файле или нет. Я пытался использовать grep, но это не сработало, потому что у каждой задачи есть свой номер.Проверьте, есть ли текстовый файл в строке

В рассуждении $ 2 Я передаю строку, которая является задачей я хочу добавить к todo.txt Я попытался с помощью этого:

if grep -Fxq “$2” todo.txt 
then 
    #do something 
else 
    #do something 

Это пример текстового файла:

Tasks: 
     1- Go to the gym 
     2- Go to work 
     3- Submit your project 
+1

показать пример файла и кода, который вы пробовали – Junaid

+1

Можете ли вы предоставить краткий пример того, как выглядят данные в вашем текстовом файле? – Asaph

+0

Когда вы используете тег «shell», что вы подразумеваете под этим? Термин «оболочка» неоднозначен. Вы имеете в виду, например, оболочку Linux или OSX, такую ​​как Bash? Что-то другое? –

ответ

0

Делают это так:

if grep -iq "$2" file;then #Assumed you want it to be case insensitive (-i) 
echo "do something" 
else 
echo "do something else" 
fi 

Примечание:

  1. проходить arguemnt $2 внутри цитаты, как это, кажется, содержит пробелы
  2. пройти полное имя задачи (должно быть уникальным)
+0

Это не удается, если '$ 2' содержит метасимволы, которые не совпадают, например' * '. Вероятно, ОР должен быть более конкретным в отношении того, является ли это проблемой. – tripleee

-1

Вы можете использовать Grep "$ 2" todo.txt и проверьте код выхода - $? что он возвращается. 0 возвращается, если найдено, и отличное от нуля, если не найдено.

+0

Вот что делает оператор 'if' OP. Явно рассматривать значение '$?' Обычно не нужно, а часто и антипаттерн. – tripleee

Смежные вопросы