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

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

$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?

1 ответ

Решение

Вам нужно заключить в кавычки переменные и результат подстановки команд, чтобы предотвратить разбиение слов:

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

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

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