После особого соответствия grep я хочу передать все следующее содержание файла в другой файл

У меня есть текстовый файл, содержащий следующие строки:

This is the first line
Second line
I have a mac
Used to have windows
Comfortable with both

Таким образом, теперь я хочу к grep, "Я имею Mac" и перемещаю все содержание, которое следует в новый файл. Как я делаю это?Спасибо!

0
задан 19 November 2018 в 07:44

2 ответа

Обрежьте все от строки, которые содержат, "Я имею Mac" в конец файла и пишу вывод в новый файл:

sed -n '/I have a mac/,$ p' in-file > out-file

Удалите все из строки, которые содержат, "Я имею Mac" в конец файла, вношу изменения вместо файла и создаю резервную копию исходного файла:

sed '/I have a mac/,$ d' in-file -i.bak

Используйте переменную, которые содержат строку, которую Вы ищете и условно выполняете вышеупомянутые две команды:

SEARCH='I have a mac'
sed -n "/$SEARCH/,$ p" in-file > out-file && sed "/$SEARCH/,$ d" in-file -i.bak

Используйте grep для нахождения (рекурсивно), какой файл (файлы) содержит искавшую строку, и передайте ее имя через канал и xargs к вышеупомянутым командам (ссылка):

export SEARCH='I have a mac'
grep -lr "$SEARCH" | xargs -L1 -I {} sh -c 'sed -n "/$SEARCH/,$ p" {} > {}.out && sed "/$SEARCH/,$ d" {} -i.bak'
1
ответ дан 27 October 2019 в 02:53

С grep Вы могли использовать -A переключатель (-> После Контекста) и | tail -n+2 запустить вывод со второй строки для пропуска соответствия.

grep -A $(wc -l < file) mac file | tail -n+2

Но использование sed вероятно, лучше для этого случая:

sed '1,/mac/d' file

Это удаляет все из первой строки (1) до и включая согласующий отрезок длинной линии.

или Вы могли использовать awk:

awk '{if(m)print}/mac/{m=1}' file

распечатает строку, когда переменная m будет верна if(m)print}, который установлен на 1/верный после первого соответствия /mac/{m=1}.


"Передача" stdout от команды до файла может быть сделан с перенаправлением: > another_file

sed '1,/mac/d' file > another_file
#or
awk '{if(m)print}/mac/{m=1}' file > another_file
1
ответ дан 27 October 2019 в 02:53

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

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