Удалить строку в терминале linux

Обновлено: 05.07.2024

у меня есть файл, foo.txt , содержащий следующие строки:

Я хочу простую команду, которая приводит к содержимому foo.txt время:

на не существует GNU sed версии 3.95, так что вы должны использовать его в качестве фильтра с временным файл:

конечно, в этом случае вы также можете использовать head -n -1 вместо sed .

Это, безусловно, самое быстрое и простое решение, особенно для больших файлов:

Если вы хотите удалить верхнюю строку, используйте это:

что означает выходные линии, начинающиеся с линии 2.

не используйте sed для удаления строк из верхней или нижней части файла-это очень медленно, если файл большой.

у меня были проблемы со всеми ответами здесь, потому что я работал с огромным файлом (

300Gb), и ни одно из решений не масштабировалось. Вот мое решение:

in words: узнайте длину файла, который вы хотите получить (длина файла минус длина его последней строки, используя bc ) и установите эту позицию в конец файла (по dd ing один байт /dev/null на него).

это быстро, потому что tail начинает читать с конца, и dd перезапишется файлом на месте вместо того, чтобы копировать (и анализировать) каждую строку файла, что делают другие решения.

Примечание: это удаляет строку из файла на месте! Сделайте резервную копию или тест на фиктивный файл, прежде чем попробовать его на свой собственный файл!

удалить последнюю строку из файла без чтения всего файла или переписывания чего-либо, вы можете использовать

чтобы удалить последнюю строку, а также распечатать ее на stdout ("pop"), вы можете объединить эту команду с tee :

эти команды могут эффективно обрабатывать очень большие файлы. Это похоже на ответ Йоси и вдохновлено им, но позволяет избежать использования нескольких дополнительных функций.

если вы собираетесь использовать эти повторно и хотите обработку ошибок и некоторые другие функции, вы можете использовать

Если вы хотите удалить только последнюю строку без изменения самого файла, сделайте

sed -e '$ d' foo.txt

Если вы хотите удалить последнюю строку сам входной файл делаем

sed -i '' -e '$ d' foo.txt

Для Пользователей Mac :

на Mac, head-n -1 не будет работать. И я пытался найти простое решение [ не беспокоясь о времени обработки], чтобы решить эту проблему только с помощью команд" голова "и/или" хвост".

я попробовал следующую последовательность команд и был рад, что могу решить ее, просто используя команду "хвост" [с параметрами, доступными на Mac ]. Итак, если вы находитесь на Mac и хотите использовать только "хвост" для решения этой проблемы, вы можете использовать эту команду :

файл cat.txt / tail-r / tail-n +2 / tail-r

объяснение :

1 > tail-r: просто меняет порядок строк на своем входе

2 > tail-n +2: это печатает все строки, начиная со второй строки на входе

Я хочу реализовать индикатор выполнения, показывающий истекшие секунды в bash. Для этого мне нужно стереть последнюю строку, показанную на экране (команда "очистить" стирает весь экран, но мне нужно стереть только строку индикатора выполнения и заменить ее новой информацией).

конечный результат должен выглядеть так:

затем через 10 секунд я хочу заменить это предложение (в том же положении на экране) на:

Эхо возврат каретки с \r

возврат каретки сам по себе перемещает курсор только в начало строки. Это нормально, если каждая новая строка вывода по крайней мере равна предыдущей, но если новая строка короче, предыдущая строка не будет полностью перезаписана, например:

чтобы фактически очистить строку для нового текста, вы можете добавить 3[K после \r :

ответ Дерека Вайта работает хорошо, пока длина линии никогда не превышает ширину терминала. Если это не так, следующий код предотвратит вывод нежелательной информации:

перед строкой написано впервые, сделать

, который сохраняет текущую позицию курсора. Теперь, когда вы хотите распечатать свою строку, используйте

чтобы сначала вернуться в сохраненное положение курсора, затем очистить экран от курсора вниз и, наконец, написать выход.

метод \033 не работал для меня. Метод \r работает, но на самом деле ничего не стирает, просто помещает курсор в начало строки. Поэтому, если новая строка короче старой, вы можете увидеть оставшийся текст в конце строки. В конце концов, tput был лучшим способом пойти. Он имеет другие виды использования, кроме курсора, плюс он предварительно установлен во многих дистрибутивах Linux & BSD, поэтому он должен быть доступен для большинства пользователей bash.

вот небольшой обратный отсчет скрипт для игры с:

используйте символ возврата каретки:

в случае, если вывод прогресса является многострочным, или сценарий уже напечатал бы новый символ строки, вы можете перейти к линиям с чем-то вроде:

что заставит курсор прыгать 5 строк вверх. Тогда вы можете перезаписать все, что вам нужно.

Если это не сработает, вы можете попробовать printf "\e[5A" или echo -e "3[5A" , который должен иметь тот же эффект.

в основном, с escape-последовательности вы можете контролировать практически все на экране.

можно добиться при оформлении возврата каретки \r .

в одной строке кода с echo -ne

самый простой способ-использовать \r персонаж, я думаю.

недостатком является то, что вы не можете иметь полные строки, так как он очищает только текущую строку.

Favorite

Добавить в избранное

Главное меню » Linux » Команда Sed для удаления строки

Команда Sed для удаления строки

Эта статья продемонстрирует, как использовать sed для удаления строки из текста.

Sed в Linux

Для демонстрации я сгенерировал простой текстовый файл.

Удаление строки с помощью sed

Чтобы удалить строку, мы воспользуемся командой sed «d». Обратите внимание, что вы должны объявить, какую строку нужно удалить. В противном случае sed удалит все строки.

Удалить одну строку

Следующая команда sed удалит первую строку текста.

В основном, чтобы удалить строку, вам нужен номер строки целевой строки. Удалим строку 5.

Чтобы удалить последнюю строку текстового файла, вместо ручного вычисления номера строки используйте «$».

Удалить диапазон строки

Удалить несколько строк

Что, если строки, которые вы хотите удалить, не находятся в фиксированном диапазоне? Взгляните на следующую команду sed. Обратите внимание, что мы используем точку с запятой (;) в качестве разделителя. По сути, каждый параметр с разделителями представляет собой отдельную команду sed.

Удалить все строки, кроме указанного диапазона

Удалить пустые строки

Если в тексте есть несколько пустых или пустых строк, следующая команда sed удалит их все.

Читать Как раскрасить вывод Diff для лучшей читабельности текста

Удалить линии по шаблону

Sed может искать определенный узор и выполнять указанные действия на линии. Мы можем использовать эту функцию для удаления определенных строк, соответствующих шаблону.

Давайте посмотрим на следующую демонстрацию. Sed удалит любую строку, содержащую строку «the».

Мы также можем описать несколько строк для поиска. Каждая строка разделяется символом «\|».

Удалить строки, начинающиеся с определенного символа

Чтобы обозначить начало строки, мы будем использовать символ каретки (^).

Следующая команда sed удалит все строки, начинающиеся с цифры. Здесь группа символов «[:digit:]» описывает все цифры (0–9).

Мы также можем описать несколько символов для действительного совпадения. В следующем примере будут найдены все строки, начинающиеся с «t» и «b».

В следующем примере показано, как удалить все строки, начинающиеся с символа верхнего регистра. Здесь мы используем группу символов верхнего регистра «[: upper:]».

Если целевые строки содержат символы нижнего регистра в начале, используйте группу символов нижнего регистра «[: lower:]».

Удалить строки, заканчивающиеся определенным символом

Чтобы обозначить конец строки, мы можем использовать символ «$». Он описывает совпадение с последним вхождением шаблона.

В следующем примере sed удалит строки, заканчивающиеся на «e».

Попробуем поискать по нескольким символам.

Удаление строк, соответствующих шаблону, и следующей строки

Мы уже продемонстрировали, как удалить строку, если шаблон совпадает. Мы также можем расширить и удалить следующую строку.

Ознакомьтесь со следующей командой sed.

Sed будет соответствовать строке, содержащей «the», и также удалит следующую строку.

Удаление строки от совпадения с шаблоном до конца

Мы можем расширить предыдущий пример, чтобы приказать sed удалить все строки, начиная с первого совпадения шаблона.

Здесь sed удалит строку, которая соответствует шаблону «первая» и все последующие строки.

Последняя мысль

Читать Linux для сетевых инженеров. Как написать сценарий Bash

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » 13 горячих клавиш в Linux, которые должен знать каждый пользователь

13 горячих клавиш в Linux, которые должен знать каждый пользователь

Краткое описание: Вот некоторые сочетания клавиш, которые должен использовать каждый пользователь Linux. Эти горячие клавиши в Linux повысят производительность и эффективность при использовании командной строки.

В ы знаете, что отличает пользователя от обычного пользователя? Мастерство работы с быстрыми клавишами.

Хорошо! Это не единственное, но это, несомненно, фактор.

Горячие клавиши помогают вам быть более продуктивными и эффективными с любым инструментом, которые вы используете. Просто подумайте об этом. Если кто-то пользуется только мышью, чтобы скопировать весь текст вместо Ctrl + A, как вы относитесь к этому?

Linux-терминал не является исключением. Есть определенные горячие клавиши в терминалах Linux, которые каждый пользователь должен знать и практиковать.

Доверьтесь нам; как только вы освоите эти горячие клавиши, вы заметите, насколько вы хороши в использовании командной строки Linux.

13 горячих клавиш в Linux, которые должен знать каждый пользователь

Обратите внимание, что мы использовали заглавные буквы в сочетаниях клавиш, но это НЕ означает, что вы должны нажать клавишу shift, используя эти горячие клавиши.

1. Tab

Это клавиша в Linux, без которого вы не сможете эффективно работать. Это сэкономит вам столько времени в командной строке Linux.

Просто начните вводить команду, имя файла, имя каталога или даже параметры команды и нажмите клавишу табуляции. Она либо автоматически завершит то, что вы набираете, либо покажет все возможные результаты для вас.

Если бы вы могли вспомнить только одну клавишу, это была бы она.

2. Ctrl + C

Это клавиши, которые вы должны нажать, чтобы выйти из команды или процесса на терминале. Это немедленно остановит запущенную программу.

Если вы хотите остановить использование программы на переднем плане, просто нажмите эту комбинацию клавиш.

Читать Как освободить порт 53, используемый systemd-resolved в Ubuntu

3. Ctrl + Z

Эта горячая клавиша отправит текущую программу в фоновом режиме. Обычно вы можете достичь этого, прежде чем запустить программу, используя параметр &, но если вы забыли сделать это, используйте эту комбинацию клавиш.

4. Ctrl + D

Эта комбинация клавиш выведет вас из текущего терминала. Если вы используете соединение SSH, оно будет закрыто. Если вы используете терминал напрямую, приложение будет немедленно закрыто.

Считайте его эквивалентно команде «exit».

5. Ctrl + L

Как очистить экран терминала? Мы думаем, используя команду clear.

Вместо того, чтобы писать CLEAR, вы можете просто использовать Ctrl + L, чтобы очистить терминал. Удобно, не так ли?

6. Ctrl + A

Этот горячая клавиша переместит курсор к началу строки.

Предположим, вы набрали длинную команду или путь в терминале, и вы хотите перейти к ее началу, с помощью клавиши со стрелкой для перемещения курсора потребуется много времени. Обратите внимание, что вы не можете использовать мышь, чтобы переместить курсор в начало строки.

Здесь пригодится Ctrl + A.

7. Ctrl + E

Этот горячая клавиша похожа на Ctrl + A. Ctrl + A отправляет курсор в начало строки, тогда как Ctrl + E перемещает курсор в конец строки.

8. Ctrl + U

Набрали неверную команду? Вместо использования backspace для отбрасывания текущей команды используйте комбинацию клавиш Ctrl + U в терминале Linux. Эта горячая клавиша стирает все от текущей позиции курсора до начала строки.

9. Ctrl + K

Это похоже на комбинацию клавиш Ctrl + U. Единственное отличие состоит в том, что вместо начала строки она стирает все от текущей позиции курсора до конца строки.

10. Ctrl + W

Вы только что узнали об удалении текста до начала и до конца строки. Но что, если вам просто нужно удалить одно слово? Используйте сочетание клавиш Ctrl + W.

С помощью сочетания клавиш Ctrl + W вы можете удалить слово, предшествующее позиции курсора. Если курсор находится на самом слове, он удалит все буквы из позиции курсора в начало слова.

Лучший способ использовать его для перемещения курсора на следующее пространство после целевого слова, а затем использовать комбинацию клавиш Ctrl + W.

Читать Как скопировать файлы между хостом и Docker-контейнером

11. Ctrl + Y

Эта команда вставляет удаляемый текст, который вы видели с помощью клавиш Ctrl + W, Ctrl + U и Ctrl + K. Пригодится, если вы удалите неправильный текст или если вам нужно использовать удаленный текст где-то еще.

12. Ctrl + P

Вы можете использовать эту горячую клавишу для просмотра предыдущей команды. Вы можете нажимать ее несколько раз, чтобы вернуться в историю команд. Во многих терминалах это может быть достигнуто с помощью ключа PgUp.

13. Ctrl + N

Вы можете использовать эту горячую клавишу в сопряжении с Ctrl + P. Ctrl + N отображает следующую команду. Если вы просматриваете предыдущие команды с помощью Ctrl + P, вы можете использовать Ctrl + N для перемещения вперед и назад. Многие терминалы имеют этот горячая клавиша, сопоставленную с ключом PgDn.

Какой у вас любимый Linux-терминал?

Мы поделились своими любимыми горячими клавишами. Какие ваши любимые горячие клавиши в Linux? Если они у вас есть, почему бы не поделиться им с остальными у нас в разделе комментариев?

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: