Мне интересно, есть ли простой способ работать на определенных линиях с предварительно назначенными номерами строк.
Допустим, я хочу вывести 1, 7, 14 и 16 строки файла, я могу просто сделать
sed -n '1p;7p;14p;16p' input_file
но это усложняется, когда операция не просто печатает, и я не хочу писать одну и ту же длинную команду 4 раза (и да, я знаю, что могу создать эту длинную команду sed, подставив одну и ту же переменную bash 4 раза, но это не достаточно идеально ...), т.е.
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
Есть ли способ сделать операцию над этими конкретными строками моего файла? Я ожидаю что-то вроде,
sed -n '1,7,14,16p'
что, конечно, не будет работать в текущей форме.
Любая помощь будет оценена. "Нет, это невозможно." с объяснениями тоже ответ, который я приму.
awk
Ответы:
Вы можете использовать ветки:
(обратите внимание, что вы также можете добавить некоторые
20,25b1
диапазоны строк или/re/b1
включить строки, которые соответствуютre
).Или вы можете использовать
awk
:Или используя хеш:
(или
BEGIN{lines[1]lines[7]lines[14]lines[16]}
если их не слишком много)источник
Просто инвертируйте свой выбор и удалите его:
источник
Первый вариант:
Вы можете использовать этот трюк:
тестирование
Вывод
Второй вариант:
Вначале вспомогательное средство
sed
используется для фильтрации только необходимых строк из файла, затем эти строки передаются на главнуюsed
с помощью длинной команды.источник