- Вывести номер строки linux
- Номер строки
- Примеры
- Ещё пример
- Удаление строки по контексту
- Удаление строки или нескольких строк в файле
- Объединение строк
- Объединение двух соседних строк попарно
- Как отобразить определенные строки файла в командной строке Linux
- Отображение определенных строк с помощью команд head и tail
- Распечатать одну конкретную строку
- Распечатать определенный диапазон строк
- Используйте SED для отображения определенных строк
- Используйте AWK для печати определенных строк из файла
- Grep с номером строки в выводе
- Предварительное условие
- Номер строки для сопоставления слова
- Номер строки всего текста в файле
- Bash-скрипты, часть 7: sed и обработка текстов
- Основы работы с sed
- Выполнение наборов команд при вызове sed
- Чтение команд из файла
- Флаги команды замены
- Символы-разделители
- Выбор фрагментов текста для обработки
- Удаление строк
- Вставка текста в поток
- Замена строк
- Замена символов
- Вывод номеров строк
- Чтение данных для вставки из файла
- Пример
- Итоги
Вывести номер строки linux
Содержимое sec.csv выглядит примерно так:
фактически, это время в минутах и секундах или просто в секундах. Привести его к виду hh:mm:ss можно командой:
после чего данные выглядят так:
Отрицание указывается знаком » ! » в конце конструкции » /:/! «
Номер строки
Примеры
UNIX | SED |
---|---|
cat | sed ‘:’ |
cat -s | sed ‘1s / ^ $ / / p; / . / , / ^ $ / !d’ |
tac | sed ‘1!G;h;$!d’ |
grep | sed ‘/ patt / !d’ |
grep -v | sed ‘/ patt / d’ |
head | sed ’10q’ |
head -1 | sed ‘q’ |
tail | sed -e ‘:a’ -e ‘$q;N;11,$D;ba’ |
tail -1 | sed ‘$!d’ |
tail -f | sed -u ‘/ . / !d’ |
cut -c 10 | sed ‘s / \(.\)\<10\>.* / \1 / ‘ |
cut -d: -f4 | sed ‘s / \(\([ ^ :]*\):\)\<4\>.* / \2 / ‘ |
tr A-Z a-z | sed ‘y / ABCDEFGHIJKLMNOPQRSTUVWXYZ / abcdefghijklmnopqrstuvwxyz / ‘ |
tr a-z A-Z | sed ‘y / abcdefghijklmnopqrstuvwxyz / ABCDEFGHIJKLMNOPQRSTUVWXYZ / ‘ |
tr -s ‘ ‘ | sed ‘s / \+ / / g’ |
tr -d ‘\012’ | sed ‘H;$!d;g;s / \n / / g’ |
wc -l | sed -n ‘$=’ |
uniq | sed ‘N; / ^ \(.*\)\n\1$ / !P;D’ |
rev | sed ‘/ \n / !G;s / \(.\)\(.*\n\) / &\2\1 / ; / / D;s / . / / ‘ |
basename | sed ‘s,.* / ,,’ |
dirname | sed ‘s,[ ^ / ]*$,,’ |
xargs | sed -e ‘:a’ -e ‘$!N;s / \n / / ;ta’ |
paste -sd: | sed -e ‘:a’ -e ‘$!N;s / \n / : / ;ta’ |
cat -n | sed ‘=’ | sed ‘$!N;s / \n / / ‘ |
grep -n | sed -n ‘/ patt / <=;p;>‘ | sed ‘$!N;s / \n / : / ‘ |
cp orig new | sed ‘w new’ orig |
hostname -s | hostname | sed ‘s / \..* / / ‘ |
Ещё пример
Эта строка проходит в цикле по всем файлам в текущем каталоге, имена которых оканчиваются на .txt, и:
Для чего это? Вот для чего. Я разбил длинный dokuwiki-файл с командами линукс на мелкие файлы. Они получились вида:
Данная последовательность команд превратила их все в вид:
Удаление строки по контексту
Для удаления строки, содержащей определённый контекст, можно использовать следующую конструкцию:
Эта команда в файле notes.ini удаляет все строки, начинающиеся с AUTO_SAVE .
Удаление строки или нескольких строк в файле
Для удаления строки или нескольких строк в файле я использую следующую конструкцию:
Эта команда в файле удаляет вторую строку.
Эта команда в файле удалит десять строк начиная с пятой (включая пятую).
Объединение строк
Этот пример показывает, как можно объединить строки, разделённые возвратом каретки:
Объединение двух соседних строк попарно
Объединить попарно две строки, разделённые возвратом каретки:
Источник
Как отобразить определенные строки файла в командной строке Linux
Главное меню » Linux » Как отобразить определенные строки файла в командной строке Linux
В Linux существует несколько способов достижения одного и того же результата. Печать определенных строк из файла не является исключением.
Для отображения 13-й строки вы можете использовать комбинацию головы и хвоста:
Или вы можете использовать команду sed:
Чтобы отобразить номера строк от 20 до 25, вы можете объединить команды head и tail следующим образом:
Или вы можете использовать команду sed следующим образом:
Подробное объяснение каждой команды следует далее. Мы также покажем использование команды awk для этой цели.
Отображение определенных строк с помощью команд head и tail
Это один из распространенных способов отображения выбранных строк. Нам легче запомнить и использовать.
Распечатать одну конкретную строку
Используйте комбинацию команды head и tail в следующей функции номер строки x:
Вы можете заменить x номером строки, которую хотите отобразить. Итак, допустим, вы хотите отобразить 13-ю строку файла.
Объяснение : Вы, вероятно, уже знаете, что команда head получает строки файла с самого начала, а команда tail – с конца.
Часть «head -x» команды получит первые x строк файлов. Затем он перенаправит этот вывод в команду tail. Команда tail отображает все строки, начиная с номера строки x.
Совершенно очевидно, что если вы возьмете 13 строк сверху, строки, начинающиеся с номера 13 до конца, будут 13-й строкой. Это логика этой команды.
Распечатать определенный диапазон строк
Теперь давайте возьмем нашу комбинацию команд head и tail, чтобы отобразить более одной строки.
Скажем, вы хотите отобразить все строки от х до у. Это включает в себя также x и y строки:
Давайте возьмем практический пример. Предположим, вы хотите напечатать все строки от строки № 20 до 25:
Используйте SED для отображения определенных строк
Мощная команда sed предоставляет несколько способов печати определенных строк.
Например, для отображения 10-й строки вы можете использовать sed следующим образом:
-n подавляет вывод, в то время как команда p печатает определенные строки. Прочитайте это руководство SED, чтобы узнать и понять его в деталях.
Чтобы отобразить все строки от номера строки x до номера строки y, используйте это:
Используйте AWK для печати определенных строк из файла
Команда awk может показаться сложной, и, безусловно, здесь задействована кривая обучения. Но, как и sed, awk также довольно мощный инструмент для редактирования и манипулирования содержимым файлов.
NR обозначает «текущий номер записи». Пожалуйста, прочитайте наше руководство по команде AWK для получения дополнительной информации.
Чтобы отобразить все строки от x до y, вы можете использовать команду awk следующим образом:
Следует синтаксис, который похож на большинство языков программирования.
Мы надеемся, что эта быстрая статья помогла вам в отображении определенных строк файла в командной строке Linux. Если вы знаете какой-то другой прием для этой цели, поделитесь им с остальными в разделе комментариев.
Источник
Grep с номером строки в выводе
Главное меню » Linux » Grep с номером строки в выводе
Предварительное условие
Чтобы достичь этой текущей цели получения определенного номера строки текста, у нас должна быть система для запуска команд в ней, которая является операционной системой Linux. Linux установлен и настроен на виртуальной машине. После ввода имени пользователя и пароля вы сможете получить доступ к приложениям.
Номер строки для сопоставления слова
Обычно, когда мы используем команду Grep, после ключевого слова Grep пишется слово, которое необходимо изучить, и за ним следует имя файла. Но, получив номер строки, мы добавим -n в нашу команду.
Вот слово, которое нужно исследовать. Номер начальной строки показывает, что связанный файл содержит слово в разных строках; в каждой строке есть выделенное слово, которое показывает строку, совпадающую с релевантным поиском.
Номер строки всего текста в файле
Номер каждой строки в файле отображается с помощью определенной команды. Он не только показывает текст, но и закрывает пустые места, а также упоминает их номера строк. Цифры показаны в левой части вывода.
Fileb.txt – это имя файла. Тогда как n для номеров строк, а l показывает только имя файла. В случае, если мы искали определенное слово в любом файле, будут показаны только имена файлов.
Параллельно с предыдущим примером здесь (за исключением свободного места) упоминаются специальные символы. Они также отображаются и читаются командой для отображения номера строки. В отличие от первого примера статьи, эта простая команда показывает номер строки именно так, как он присутствует в файле. Поскольку ограничений поиска нет, объявляется в команде.
Источник
Bash-скрипты, часть 7: sed и обработка текстов
В прошлый раз мы говорили о функциях в bash-скриптах, в частности, о том, как вызывать их из командной строки. Наша сегодняшняя тема — весьма полезный инструмент для обработки строковых данных — утилита Linux, которая называется sed. Её часто используют для работы с текстами, имеющими вид лог-файлов, конфигурационных и других файлов.
Если вы, в bash-скриптах, каким-то образом обрабатываете данные, вам не помешает знакомство с инструментами sed и gawk. Тут мы сосредоточимся на sed и на работе с текстами, так как это — очень важный шаг в нашем путешествии по бескрайним просторам разработки bash-скриптов.
Сейчас мы разберём основы работы с sed, а так же рассмотрим более трёх десятков примеров использования этого инструмента.
Основы работы с sed
Утилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил. Вот как выглядит схема вызова этой команды:
По умолчанию sed применяет указанные при вызове правила, выраженные в виде набора команд, к STDIN . Это позволяет передавать данные непосредственно sed.
Вот что получится при выполнении этой команды.
Простой пример вызова sed
В данном случае sed заменяет слово «test» в строке, переданной для обработки, словами «another test». Для оформления правила обработки текста, заключённого в кавычки, используются прямые слэши. В нашем случае применена команда вида s/pattern1/pattern2/ . Буква «s» — это сокращение слова «substitute», то есть — перед нами команда замены. Sed, выполняя эту команду, просмотрит переданный текст и заменит найденные в нём фрагменты (о том — какие именно, поговорим ниже), соответствующие pattern1 , на pattern2 .
Выше приведён примитивный пример использования sed, нужный для того, чтобы ввести вас в курс дела. На самом деле, sed можно применять в гораздо более сложных сценариях обработки текстов, например — для работы с файлами.
Ниже показан файл, в котором содержится фрагмент текста, и результаты его обработки такой командой:
Текстовый файл и результаты его обработки
Здесь применён тот же подход, который мы использовали выше, но теперь sed обрабатывает текст, хранящийся в файле. При этом, если файл достаточно велик, можно заметить, что sed обрабатывает данные порциями и выводит то, что обработано, на экран, не дожидаясь обработки всего файла.
Sed не меняет данные в обрабатываемом файле. Редактор читает файл, обрабатывает прочитанное, и отправляет то, что получилось, в STDOUT . Для того, чтобы убедиться в том, что исходный файл не изменился, достаточно, после того, как он был передан sed, открыть его. При необходимости вывод sed можно перенаправить в файл, возможно — перезаписать старый файл. Если вы знакомы с одним из предыдущих материалов этой серии, где речь идёт о перенаправлении потоков ввода и вывода, вы вполне сможете это сделать.
Выполнение наборов команд при вызове sed
Для выполнения нескольких действий с данными, используйте ключ -e при вызове sed. Например, вот как организовать замену двух фрагментов текста:
Использование ключа -e при вызове sed
К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела.
Для ввода нескольких шаблонов обработки текста при вызове sed, можно, после ввода первой одиночной кавычки, нажать Enter, после чего вводить каждое правило с новой строки, не забыв о закрывающей кавычке:
Вот что получится после того, как команда, представленная в таком виде, будет выполнена.
Другой способ работы с sed
Чтение команд из файла
Если имеется множество команд sed, с помощью которых надо обработать текст, обычно удобнее всего предварительно записать их в файл. Для того, чтобы указать sed файл, содержащий команды, используют ключ -f :
Вот содержимое файла mycommands :
Вызовем sed, передав редактору файл с командами и файл для обработки:
Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах.
Использование файла с командами при вызове sed
Флаги команды замены
Внимательно посмотрите на следующий пример.
Вот что содержится в файле, и что будет получено после его обработки sed.
Исходный файл и результаты его обработки
Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке. Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг.
Схема записи команды замены при использовании флагов выглядит так:
Выполнение этой команды можно модифицировать несколькими способами.
- При передаче номера учитывается порядковый номер вхождения шаблона в строку, заменено будет именно это вхождение.
- Флаг g указывает на то, что нужно обработать все вхождения шаблона, имеющиеся в строке.
- Флаг p указывает на то, что нужно вывести содержимое исходной строки.
- Флаг вида w file указывает команде на то, что нужно записать результаты обработки текста в файл.
Рассмотрим использование первого варианта команды замены, с указанием позиции заменяемого вхождения искомого фрагмента:
Вызов команды замены с указанием позиции заменяемого фрагмента
Тут мы указали, в качестве флага замены, число 2. Это привело к тому, что было заменено лишь второе вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены — g :
Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте.
Флаг команды замены p позволяет выводить строки, в которых найдены совпадения, при этом ключ -n , указанный при вызове sed, подавляет обычный вывод:
Как результат, при запуске sed в такой конфигурации на экран выводятся лишь строки (в нашем случае — одна строка), в которых найден заданный фрагмент текста.
Использование флага команды замены p
Воспользуемся флагом w , который позволяет сохранить результаты обработки текста в файл:
Сохранение результатов обработки текста в файл
Хорошо видно, что в ходе работы команды данные выводятся в STDOUT, при этом обработанные строки записываются в файл, имя которого указано после w .
Символы-разделители
Представьте, что нужно заменить /bin/bash на /bin/csh в файле /etc/passwd . Задача не такая уж и сложная:
Однако, выглядит всё это не очень-то хорошо. Всё дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды.
К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после s :
В данном случае в качестве разделителя использован восклицательный знак, в результате код легче читать и он выглядит куда опрятнее, чем прежде.
Выбор фрагментов текста для обработки
До сих пор мы вызывали sed для обработки всего переданного редактору потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста — некую конкретную строку или группу строк. Для достижения такой цели можно воспользоваться двумя подходами:
- Задать ограничение на номера обрабатываемых строк.
- Указать фильтр, соответствующие которому строки нужно обработать.
Рассмотрим первый подход. Тут допустимо два варианта. Первый, рассмотренный ниже, предусматривает указание номера одной строки, которую нужно обработать:
Обработка только одной строки, номер который задан при вызове sed
Второй вариант — диапазон строк:
Обработка диапазона строк
Кроме того, можно вызвать команду замены так, чтобы файл был обработан начиная с некоей строки и до конца:
Обработка файла начиная со второй строки и до конца
Для того, чтобы обрабатывать с помощью команды замены только строки, соответствующие заданному фильтру, команду надо вызвать так:
По аналогии с тем, что было рассмотрено выше, шаблон передаётся перед именем команды s .
Обработка строк, соответствующих фильтру
Тут мы использовали очень простой фильтр. Для того, чтобы в полной мере раскрыть возможности данного подхода, можно воспользоваться регулярными выражениями. О них мы поговорим в одном из следующих материалов этой серии.
Удаление строк
Утилита sed годится не только для замены одних последовательностей символов в строках на другие. С её помощью, а именно, используя команду d , можно удалять строки из текстового потока.
Вызов команды выглядит так:
Мы хотим, чтобы из текста была удалена третья строка. Обратите внимание на то, что речь не идёт о файле. Файл останется неизменным, удаление отразится лишь на выводе, который сформирует sed.
Удаление третьей строки
Если при вызове команды d не указать номер удаляемой строки, удалены будут все строки потока.
Вот как применить команду d к диапазону строк:
Удаление диапазона строк
А вот как удалить строки, начиная с заданной — и до конца файла:
Удаление строк до конца файла
Строки можно удалять и по шаблону:
Удаление строк по шаблону
При вызове d можно указывать пару шаблонов — будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними:
Удаление диапазона строк с использованием шаблонов
Вставка текста в поток
С помощью sed можно вставлять данные в текстовый поток, используя команды i и a :
- Команда i добавляет новую строку перед заданной.
- Команда a добавляет новую строку после заданной.
Рассмотрим пример использования команды i :
Теперь взглянем на команду a :
Как видно, эти команды добавляют текст до или после данных из потока. Что если надо добавить строку где-нибудь посередине?
Тут нам поможет указание номера опорной строки в потоке, или шаблона. Учтите, что адресация строк в виде диапазона тут не подойдёт. Вызовем команду i , указав номер строки, перед которой надо вставить новую строку:
Команда i с указанием номера опорной строки
Проделаем то же самое с командой a :
Команда a с указанием номера опорной строки
Обратите внимание на разницу в работе команд i и a . Первая вставляет новую строку до указанной, вторая — после.
Замена строк
Команда c позволяет изменить содержимое целой строки текста в потоке данных. При её вызове нужно указать номер строки, вместо которой в поток надо добавить новые данные:
Замена строки целиком
Если воспользоваться при вызове команды шаблоном в виде обычного текста или регулярного выражения, заменены будут все соответствующие шаблону строки:
Замена строк по шаблону
Замена символов
Команда y работает с отдельными символами, заменяя их в соответствии с переданными ей при вызове данными:
Используя эту команду, нужно учесть, что она применяется ко всему текстовому потоку, ограничить её конкретными вхождениями символов нельзя.
Вывод номеров строк
Если вызвать sed, использовав команду = , утилита выведет номера строк в потоке данных:
Вывод номеров строк
Потоковый редактор вывел номера строк перед их содержимым.
Если передать этой команде шаблон и воспользоваться ключом sed -n , выведены будут только номера строк, соответствующих шаблону:
Вывод номеров строк, соответствующих шаблону
Чтение данных для вставки из файла
Выше мы рассматривали приёмы вставки данных в поток, указывая то, что надо вставить, прямо при вызове sed. В качестве источника данных можно воспользоваться и файлом. Для этого служит команда r , которая позволяет вставлять в поток данные из указанного файла. При её вызове можно указать номер строки, после которой надо вставить содержимое файла, или шаблон.
Вставка в поток содержимого файла
Тут содержимое файла newfile было вставлено после третьей строки файла myfile .
Вот что произойдёт, если применить при вызове команды r шаблон:
Использование шаблона при вызове команды r
Содержимое файла будет вставлено после каждой строки, соответствующей шаблону.
Пример
Представим себе такую задачу. Есть файл, в котором имеется некая последовательность символов, сама по себе бессмысленная, которую надо заменить на данные, взятые из другого файла. А именно, пусть это будет файл newfile , в котором роль указателя места заполнения играет последовательность символов DATA . Данные, которые нужно подставить вместо DATA , хранятся в файле data .
Решить эту задачу можно, воспользовавшись командами r и d потокового редактора sed:
Замена указателя места заполнения на реальные данные
Как видите, вместо заполнителя DATA sed добавил в выходной поток две строки из файла data .
Итоги
Сегодня мы рассмотрели основы работы с потоковым редактором sed. На самом деле, sed — это огромнейшая тема. Его изучение вполне можно сравнить с изучением нового языка программирования, однако, поняв основы, вы сможете освоить sed на любом необходимом вам уровне. В результате ваши возможности по обработке с его помощью текстов будет ограничивать лишь воображение.
На сегодня это всё. В следующий раз поговорим о языке обработки данных awk.
Уважаемые читатели! А вы пользуетесь sed в повседневной работе? Если да — поделитесь пожалуйста опытом.
Источник