Я хочу удалить один или несколько конкретных номеров строк из файла. Как бы я сделал это с помощью sed?
unix
sed
line-numbers
Джастин этир
источник
источник
Ответы:
Если вы хотите удалить строки с 5 по 10 и 12:
Это выведет результаты на экран. Если вы хотите сохранить результаты в одном файле:
Это создаст резервную копию файла
file.bak
и удалит указанные строки.Примечание. Номера строк начинаются с 1. Первая строка файла - 1, а не 0.
источник
sed -e '5,$d' file
sed -e '5d' file
. Синтаксис есть<address><command>
; где<address>
может быть как одна строка5
или ряд строк5,10
, и командаd
удаляет данную строку или строки. Адреса также могут быть регулярными выражениями или знаком доллара,$
обозначающим последнюю строку файла.Вы можете удалить отдельную строку с ее номером
Это удалит строку с номером 33 строки и сохранит обновленный файл.
источник
sed -i '0,/<TARGET>/{/<NEW_VALUE>/d;}' '<SOME_FILE_NAME>'
. Спасибо!и как хорошо
источник
источник
Это очень часто является признаком антипаттерна. Инструмент, который произвел номера строк, вполне может быть заменен инструментом, который сразу удаляет строки. Например;
(где
deletelines
находится нужная вам утилита)Тем не менее, если вы находитесь в ситуации, когда вам действительно нужно выполнить эту задачу, вы можете сгенерировать простой
sed
скрипт из файла номеров строк. С юмором (но, возможно, немного смущающим) вы можете сделать это сsed
.Он принимает файл номеров строк, по одному на строку, и выдает на стандартном выводе те же номера строк с
d
добавлением после каждого. Это допустимыйsed
скрипт, который мы можем сохранить в файл или (на некоторых платформах) передать в другойsed
экземпляр:На некоторых платформах
sed -f
не понимает аргумент option-
для обозначения стандартного ввода, поэтому вам нужно перенаправить скрипт во временный файл и очистить его, когда вы закончите, или, возможно, заменить одиночную черту/dev/stdin
или/proc/$pid/fd/1
вашей ОС (или оболочкой). ) имеет это.Как всегда, вы можете добавить
-i
перед-f
опцией иметь возможностьsed
редактировать целевой файл на месте, вместо выдачи результата на стандартный вывод. На платформах * BSDish (включая OSX) вам также необходимо указать явный аргумент-i
; распространенная идиома - предоставить пустой аргумент;-i ''
,источник
p
вместоd
вместе с опцией-n
(она не будет работать-n
и!d
не будет работать).Я хотел бы предложить обобщение с помощью awk.
Когда файл состоит из блоков фиксированного размера и строки для удаления повторяются для каждого блока, awk может нормально работать таким образом
В этом примере размер блока равен 2000, и я хочу напечатать строки [1..713] и [1026..1029].
NR
переменная, используемая awk для хранения номера текущей строки%
дает остаток (или модуль) деления двух целых чисел;nl=((NR-1)%BLOCKSIZE)+1
Здесь мы записываем в переменную nl номер строки внутри текущего блока. (увидеть ниже)||
и&&
являются логическим оператором OR и AND .print $0
пишет полную строкуисточник