Циклы и grep записывают вывод только для последней строки - PullRequest
0 голосов
/ 02 октября 2018

Я перебираю строки в текстовом файле.И выполнение grep для каждой строки через каталоги.как показано ниже

while IFS="" read -r p || [ -n "$p" ]
do
 echo "This is the field: $p"
  grep -ilr $p * >> Result.txt
done < fields.txt

Но выше записывает результаты для последней строки в файле.И не для других линий.

Если я вручную выполню команду с другими строками, она будет работать (что означает, что совпадение найдено).Что-то, что мне здесь не хватает?Спасибо

fields.txt выглядит так

annual_of_measure__c
attached_lobs__c
apple 

1 Ответ

0 голосов
/ 02 октября 2018

Когда файл fields.txt

  1. имеет линейное окончание DOS / Windows, состоящее из двух символов (возврат каретки и перевод строки) и
  2. , этот файл обрабатывается Unix-Toolsожидая окончания строки Unix, состоящие только из одного символа (перевод строки)

, тогда строка, прочитанная командой read и сохраненная в переменной $p, находится в первой строке annual_of_measure__c\r (обратите внимание на дополнительные\r для возврата каретки).Тогда grep не найдет совпадений.

Из вашего описания в вопросе и подтверждения в комментариях кажется, что последняя строка в fields.txt вообще не имеет конца строки, поэтому переменная $p является обычной строкой apple и grepможно найти совпадение в последней строке файла.

Существуют инструменты для преобразования строк, например, см. этот ответ или и другие варианты в этом ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...