Порядок файла был уничтожен во время поиска и повторения цикла 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
это как я делал выше. Последний имеет ряд преимуществ, объясненных в этом замечательном ответе: когда я должен использовать перенаправление ввода?