Я пытаюсь удалить первые 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, и это не несет параметры от строки до строки
любая справка значительно ценилась бы
Спасибо!
Уверенный можно использовать 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
Вы могли использовать 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
соответствия шаблона впервые и все строки после этого, включая саму подобранную строку печатаются, те перед этим нет.