В определенных случаях нам нужно удалить определенную строку из файла или нескольких, например, со мной случилось, что у меня был целый список файлов, и мне нужно удалить строку № 27 из всех них (строка № 27 - это то, что ACL, нормы, правила, конфигурации), я могу либо редактировать файл за файлом, либо просто достичь того, что мне нужно, с помощью команды СЕПГ и сценарий bash (необязательно).
Но давайте попробуем один файл несколько проще.
У нас есть файл дистрибутивы-deb.txt который содержит это:
Debian
Kubuntu
Archlinux
Soluses
мята
Другими словами, файл дистрибутивы-deb.txt - это то, в которое мы поместим дистрибутивы на основе Debian, но там мы видим, что в строке №3 находится «archlinux», дистрибутив, который явно не имеет ничего общего с Debian, поэтому мы должны исключить эту строку. Чтобы исключить строку № 3 этого файла, мы поместим следующее:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Объяснить эту строку довольно просто, используя жаждущий "3d" мы указываем, что удалим строку №3 с дистрибутивы-deb.txt Мы указываем, с каким файлом работать, то есть удаляем строку №3 этого файла, и до этого момента, если мы нажмем Enter, она покажет нам, что мы хотим, но в терминале, поэтому с > дистрибутив-деб-ок.txt мы указываем, что вместо отображения результата в терминале он помещает его в файл с этим именем.
Что просто?
Кроме того, мы можем избежать использования > дистрибутив-деб-ок.txt используя правильный параметр СЕПГ, параметр -i
То есть на случай, если мы хотим удалить строку из файла и сохранить ее с тем же именем (а не в другом файле), просто добавьте параметр -i :
sed -i "3d" distros-deb.txt
Это удалит строку №3 из distros-deb.txt и сохранит ее.
Что, если мне нужен диапазон строк, то есть удалить строку №3, но также строки №4 и №5? Для этого мы ставим диапазон от 3 до 5, то есть:
sed -i "3,5d" distros-deb.txt
И он покажет мне только debian и kubuntu 😀
Так что, если я хочу удалить строку со 2 до последней, когда я не знаю всего строк?
Просто используйте символ доллара - »$
sed -i "2,$d" distros-deb.txt
В случае, если вы хотите исключить из первой строки до # 4, мы просто помещаем значение 1 в начало:
sed -i "1,4d" distros-deb.txt
Это было все, очень полезный совет, когда вы хотите создавать сценарии bash для автоматизации задач, и вам нужно изменить и удалить строки файлов конфигурации, чтобы изменить, мы можем использовать СЕПГ o Perl, а также для устранения мы уже знаем, как это сделать с помощью sed 😉
привет
Очень хороший вклад 😉
Благодарю вас!
Кстати, мы получили ваше письмо прямо сейчас, я вам отвечу 😀
привет
Как верховный жрец терминала, серверов и ssh-соединений, я прихожу к вам, о, великий KZKG ^ Gaara, и я спрашиваю вас: где я могу получить руководство на уровне моего невежества, которое позволяет мне использовать ssh-соединения между двумя удаленными машинами в разных сетях для обмена текстовые файлы, pdf, изображения и звук (mp3)….
????
Серьезно, не могли бы вы посоветовать мне в этом отношении, у меня две машины, одна на работе, а другая дома, и мне нужно соединение по ssh между ними (потому что, как я понимаю, ssh позволяет передавать контент между машинами, я прав? ).
И если я ошибаюсь, какое приложение посоветуете?
И где я могу найти базовое руководство по этому поводу?
объект
scp user @ machine_address: путь user @ machine_address: путь.
Тот же синтаксис, что и cp, источник -> место назначения.
Ты появился, чувак, ты заблудился.
Хороший совет!
Интересный совет… xD
случайно вы не знаете тот, который выделяет жирный текст?
Я имею в виду, у меня есть текстовый файл, который представляет собой словарь, в нем более 10000 XNUMX строк, и я хочу, чтобы он выделял определенный текст перед точками приостановки ":", и делать это по одной - слишком много.
Привет,
Файл txt представляет собой обычный текст, как следует из его названия ... простой, без форматов или чего-либо подобного, извините, но я не думаю, что то, о чем вы просите, можно сделать, не так ли? 🙁
привет
на самом деле может, но вам нужно знать формат назначения.
ре:
echo $ (echo "Роберт: Здравствуйте. Поменяйте здесь" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
это вопрос совладания.
другой способ удаления, который можно использовать, - это sed '/' $ 1 '/ d', но вы должны быть уверены в этом.
затем завершите сохранение в * .odt
Нет более простого способа сделать это с помощью LibreOffice?
Не могли бы вы удалить часть строки и оставить остальную?
Допустим, я хочу удалить все, что находится перед словом в определенной строке.
Или удалите все, что следует за этим словом.
Да, это вопрос извлечения регулярного выражения (при необходимости man sed -r, –regexp-extended)
Начиная с того, что я нахожу
echo «Роберт: Привет. Изменить здесь »| sed 's / Изменить //'
с четко выраженным рисунком и с. (один символ) и * (более одного)
то:
echo «Роберт: Привет. Изменить здесь »| sed 's / Изменить. * //'
раньше:
echo «Роберт: Привет. Изменить здесь »| sed 's /. * Изменить //'
Если важно, что слово появляется
echo «Роберт: Привет. Изменить здесь »| sed 's / Изменить. * / Изменить /'
или более сложный
в строке, содержащей Роберта, что следует после Change
echo -e «Фриц: Привет. Поменяйте здесь \ nРоберт: Привет. Изменить здесь »| sed '/Robert/s/Cambio.*//'
или как в начале вынимаем вторую строку и обрабатываем остальные
echo -e «Фриц: Привет. Поменяйте здесь \ nРоберт: Привет. Поменяйте здесь \ nДругое »| sed -e 2d -e 's / Изменить. * //'
echo -e «Фриц: Привет. Поменяйте здесь \ nРоберт: Привет. Поменяйте здесь \ nДругое »| sed '2d; s / Изменить. * //'
Спасибо, мне это очень пригодилось.
Хорошая статья, те, которые мне нравятся, как замечательный Системный администратор!
Какой была бы наша жизнь без sed, awek, perl, grep, tail, head, Emacs и многих других необходимых инструментов !?
Спасибо, очень помогли.
Здравствуйте, а как вы могли удалить из файла строки 1,4 и 10 в одной команде?