Ответ 1
попробуйте это (только для GNU):
sed '0,/^bin$/d'
.. вывод:
$sed '0,/^bin$/d' file boot ... sys tmp usr var vmlinuz
Я использую sed для фильтрации списка файлов. У меня есть отсортированный список папок, и я хочу получить все строки после определенного. Для выполнения этой задачи я использую описанное решение здесь, которое хорошо работает с любым вводом, который я пытался, но не работает, когда совпадение находится в первой строке. В этом случае sed удалит все строки ввода
Вот пример:
(ssh) [email protected] : ~
[0] % ls -1 /
bin
boot
...
sys
tmp
usr
var
vmlinuz
(ssh) [email protected] : ~
[0] % ls -1 / | sed '1,/tmp/d'
usr
var
vmlinuz
(ssh) [email protected] : ~
[0] % ls -1 / | sed '1,/^bin$/d'
# sed will delete all lines from the input stream
Как мне изменить команду, чтобы рассмотреть также предел, когда первая строка соответствует регулярному выражению?
BTW sed '1,1d'
корректно работает и удаляет только первую строку.
попробуйте это (только для GNU):
sed '0,/^bin$/d'
.. вывод:
$sed '0,/^bin$/d' file boot ... sys tmp usr var vmlinuz
Эта команда sed
будет печатать все строки после и включать соответствующую строку:
sed -n '/^WHATEVER$/,$p'
Переключатель -n
делает sed
печать только тогда, когда сказано (команда p
).
Если вы не хотите включать соответствующую строку, вы можете сказать sed удалить с начала файла в соответствующую строку:
sed '1,/^WHATEVER$/d'
(Мы используем команду d
, которая удаляет строки.)
вы также можете попробовать:
awk '/searchname/{p=1;next}{if(p){print}}'
Я бы вставил тег перед совпадением и удалил в области видимости /start/,/####tag####/
.