Порядок файла был уничтожен при захвате и повторении в для цикла

Я хочу записать результат grep внутри для цикла в файл, сохраняя исходную файловую структуру. Исходный файл:

$cat newtest1
some_text
/homes/myself/joz
ivan petrov - 20/10/19
new customer:
/homes/myself/silvia
john smith - 30/11/19
old customer:
some_text

Я использую grep в для цикла и получаю следующее:

$for i in `cat newtest1 | grep customer -B2`; do echo $i; done
/homes/myself/joz
ivan
petrov
-

и т.д. Структура файла была изменена. Я попробовал printf - тот же результат. Вопрос: как сохранить структуру файла с помощью grep в для цикла?

0
задан 12 March 2019 в 01:52

1 ответ

Необходимо заключить в кавычки переменные и результат замены команды для предотвращения разделения слова:

for i in "$(<newtest1 grep customer -B2)"; do
  echo "$i"
done

Конечно, чтобы просто произвести согласующие отрезки длинной линии Вам не нужно for цикл, но я предполагаю, что Вы хотите сделать другие вещи со строками. В любом случае Вам не нужно cat, можно позволить grep откройте файл с grep … newtest1 или позвольте оболочке открыть его и присвоить ее содержание grepstdin, как я сделал выше. У последнего есть много преимуществ, объясненных в этом большом ответе: Когда я должен использовать перенаправление ввода?

3
ответ дан 26 October 2019 в 01:41

Другие вопросы по тегам:

Похожие вопросы: