как удалить первые N-1 строки до данной входной строки

Я пытаюсь удалить первые N-1 строки до первого соответствия указанной строки

Я очень плохо знаком со сценариями, но от моего поиска с помощью Google я полагаю, что у меня есть две команды, в которых я нуждаюсь, но не знаю, как использовать их вместе:

grep -n -m 1 'STRING' file.txt |sed  's/\([0-9]*\).*/\1/'

даст мне строку N

sed -e '1,Nd' file.txt > file2.txt

удалит первые строки N из file.txt и разместит их в file2.txt

могут я для использования '1,N-1d'?

Далее, как я могу получить все вышеупомянутое в одну строку, поскольку я выполняю это от ANSYS, и это не несет параметры от строки до строки

любая справка значительно ценилась бы

Спасибо!

2
задан 3 January 2019 в 18:50

2 ответа

Уверенный можно использовать grep и sed и колотите арифметическое расширение, например:

N=$(grep -n -m1 'STRING' file1.txt | cut -d: -f1)
sed "1,$(( N - 1 ))d" file1.txt > file2.txt

Можно получить тот же эффект с sed, например:

sed '/STRING/!d; :a; n; ba' file1.txt > file2.txt
1
ответ дан 2 December 2019 в 03:30

Вы могли использовать awk (оба значение по умолчанию mawk и GNU gawk работа версии для этого) для фильтрации файла с единственной командой:

awk '/STRING/{y=1} y' file1.txt > file2.txt

Здесь, /STRING/{y=1} сканирования каждая входная строка для образца регулярного выражения STRING и если это соответствует, установите переменную y к 1. Оба имя и значение выбраны произвольно здесь, мы просто, используют это в качестве булева флага, чтобы помнить, видели ли мы шаблон, Вы уже ищете или нет.

Затем также для каждой строки, после выполнения первой проверки для той строки, это оценивает выражение y. Если это - значение truthy (как, например, 1 здесь; в то время как переменная, не определяемая все же или если бы это было 0, который был бы falsey), awk выполняет действие по умолчанию для той строки, потому что мы не указывали никого после выражения, которое должно просто распечатать ту строку.

Тем путем переменная установлена когда наш STRING соответствия шаблона впервые и все строки после этого, включая саму подобранную строку печатаются, те перед этим нет.

1
ответ дан 2 December 2019 в 03:30

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

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