Правила использования операторов grep и find в Linux

У меня есть текстовый файл «text.txt», он содержит кучу строк с текстом (или пустые строки).

Назначение операторов find и grep

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

Назначение операторов find и grep

Команда grep в Linux также относится к поисковым, но внутри файлов. Буквальный перевод команды – «глобальная печать регулярных выражений», но под печатью здесь понимается вывод результатов работы на устройство по умолчанию, каковым обычно является монитор. Обладая огромным потенциалом, оператор используется достаточно часто и позволяет производить поиск внутри одного или нескольких файлов по заданным фрагментам (шаблонам). Поскольку терминология в Linuxе существенно отличается от таковой в среде Windows, очень многие пользователи испытывают значительные трудности с использованием этих команд. Постараемся устранить этот недостаток.

ответа

Лучший ответ

Простая замена sed также будет работать с учетом номера строки, например,

sed -i ‘2s/^/# /’ file

Выше будет редактировать file вместо строки комментария 2, вставляя «# » в начало строки. Чтобы передать номер строки в качестве аргумента, дважды заключите в кавычки выражение, например,

#!/bin/bash sed -i «$1s/^/# /» «$2»

Примет номер строки в качестве первого аргумента и файл для комментария в качестве второго и отредактирует файл на месте, сделав комментарий. Вы должны проверить, что первый аргумент является целым числом, а второй — файлом, который существует и не является пустым. Если вы сохраните сценарий как cmt и сделаете его исполняемым (например, chmod +x cmt), то вы закомментируете вторую строку в file как:

./cmt 2 file 2 David C. Rankin 14 Июл 2020 в 04:47

Это должно быть задачей для awk. В этом решении мы создаем имена переменных lines, в которых будут номера строк, какие бы вы не хотели изменить (разделенные запятыми), просто укажите любое количество номеров строк со значениями, разделенными запятыми, и это должно сработать. Успешно протестировал на

awk -v lines=»2,3,4″ ‘ BEGIN{ num=split(lines,array,»,») for(i=1;i<=num;i++){ linechange[array[i]] } } FNR in linechange{ $0=»#» $0 } 1 ‘ Input_file 5 RavinderSingh13 14 Июл 2020 в 04:40

Опции командной строки

В истории развития операционной системы UNIX программы использовали разные способы задания своих опций: ♦ односимвольные, например ls -а -l (что эквивалентно ls -l -а или ls -al или ls -la); ♦ многосимвольные, например find /var  -xdev; ♦ длинные, например ps  —help; ♦ с аргументами, например kill  -n  15 1, или kill  -n15  1, или du  -В  M, или  du -BM,

или find /etc -type d, или даже ls —sort=slze;

♦ «нестандартные», например set +x,  tar  czf ~ или dd  if=/dev/dvd  of=.

Знак «минус», предваряющий опции, естественно используется для того, чтобы отличать их от аргументов. Среди прочих, он был выбран потому, что редко встречается как первый символ в аргументах команд (в качестве которых зачастую выступают имена файлов).

И еще потому, что на терминале классической UNIX набор более логичного знака «плюс» (что могло бы означать «включить»,«активировать») требовал достаточных усилий по нажатию клавиши SHIFT. В результате получилось, что, например, в команде set опция х (execution trace) в форме -х включает, а +х выключает трассировку выполнения команд.

В тех редких случаях, когда аргумент команды все же начинается с символа «минус» и тем самым похож на опцию (представим, что нужно выполнить действие над файлом с именем -=filenames=-), специальная опция — сигнализирует о конце списка опций, за которым следуют лексемы, обязанные расцениваться как аргументы, вне зависимости от их написания.

Конец списка опций

[email protected]: ~$ stat -=filename=-

stat: неверный ключ —  «=» Попробуйте «stat —help» для получения более подробного описания.

Читайте также:  Как отключить защиту в Android (SeLinux / Android Kernel Insecure)

[email protected]: ~$ stat  — —  -=filename=-

Файл: «-=filename=-» Размер:  0                         Блоков: 0                     Блок B/B: 4096         пустой обычный файл Устройство: fc00h/64512d                  Inode: 26870044            Ссылки: 1 Доступ: (0600/-rw -)                      Uid: (  1000/    john)                Gid: ( 1000/     john) Доступ: 2018-08-24    01:37: +0300

Модифицирован: 2018-08-24 01:37: +0300

Изменён: 2018-08-24 01:37: +0300

Создан: —

Короткие, односимвольные опции (например -l -а) без своих аргументов издревле можно было объединять в группы (-lа или -al), однако их в этом случае сложно отличать от многосимвольных (-xdev) или односимвольных, склеенных со своими аргументами (-ВМ).

Поэтому позже появились длинные (в так называемом GNU-стиле) опции, обозначаемые двумя знаками «минус», позволяющие навести некоторый порядок в виде —block-size=M вместо -ВМ или, предположим,

—dont-descent вместо -xdev.

Командный интерфейс Linux

Командный интерфейс Linux, каким бы «страшным» не казался, в реальности удивительно функционален для решения массы разнообразных задач, хотя он и не решает абсолютно все задачи одинаково эффективно. Например, его невероятно сложно и неудобно использовать для обработки графической информации, когда при взаимодействии с пользователем требуется ввести колоссальное количество «графических» данных, например, указать обтравочный контур. В этом случае графический интерфейс с «непосредственным» манипулированием подойдет гораздо лучше.

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

Естественные языки, которые используют люди для взаимодействия между собой, на порядок сложнее формального командного языка операционной системы. Однако использование глаголов (команд), существительных (аргументов) и наречий (опций) родного языка мало у кого вызывает чувство неудобства. Наоборот, странным покажется тот человеческий индивидуум, который попытается в обществе использовать непосредственное манипулирование, например, указывая (щелкая) пальцем в магазине на товары (значки) и мыча что-то нечленораздельное. Скорее всего, мы примем его за иностранца (или это будет ребенок), еще не в полной мере владеющего языком.

Именно командный интерфейс в современном виде — аудиоформе — больше не является уделом художественных фантастических произведений, где капитаны межгалактических кораблей командуют кораблям «включить защитное поле». Теперь мы все можем при помощи командного аудиоинтерфейса смартфона найти ближайшую пиццерию или маршрут к нужному месту. Надеюсь, что и алфавитно-цифровая форма командного интерфейса, доставшаяся «в наследство» от UNIX из 70-х годов прошлого века, вас тоже не особо испугает. Ok, Google?

Как обойти ограничение

Чтобы обойти ограничение, используйте один или несколько из следующих методов в соответствии с ситуацией:

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

    Например, вместо использования командной строки в пакетном файле измените программу так, чтобы она использовала командную строку, аналогичную следующей командной строке, где ParameterFile — это файл, содержащий необходимые параметры Parameter1 Parameter2… ParameterN (parameter1 parameter2… ParameterN):

    c:\temp\

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

    Например, если переменная среды PATH содержит более 8191 символов, используйте один или несколько из следующих методов, чтобы уменьшить количество символов:

    • Используйте более короткие имена для папок и файлов.
    • Уменьшите глубину деревьев папок.
    • Храните файлы в меньшем числе папок, чтобы в переменной среды PATH требовалось меньше папок.
    • Изучите возможные методы, которые можно использовать для уменьшения зависимости PATH для locating DLL-файлов.

Утилита FINDSTR командная строка

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

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:файл][/C:строчка] [/G:файл] [/D:список_папок] [/A:цвета] [/OFF[LINE]] «искомые_значения»[[диск:][путь]имя_файла[ …]]

/B – Данный ключ определяет поиск образца лишь в началах строчек.

/E — Данный ключ определяет поиск образца лишь в конце.

/R – Фразы и слова будут приниматься как регулярные выражения.

/S – Производит поиск файлов через командную строку в текущем каталоге и всех его подпапках.

/I – Данный ключ определяет, что поиск фразы из командной строки будет вестись без учета регистра.

/X – Производит вывод только тех строчек, которые содержат точное совпадение.

/V — Производит вывод только тех строчек, которые не содержат точного совпадения с искомой фразой.

/N — Производит вывод номера строчки (которые содержат точное совпадение) и ее содержимое.

/M — Производит вывод лишь имени документа, который содержит совпадение.

/O – Вывести список найденных строк через пустую строчку.

/P – Данный параметр определяет, что произойдет пропуск всех строк, которые содержат непечатаемые символы.

/OFF[LINE] — Не пропускает те документы, у которых установлен атрибут «Автономный».

/A:цвета – Шестнадцатеричный код цвета, для получения справки можете ввести команду «COLOR /?»

/F:файл – Производит чтение списка файлов из заданного документа.

/C:строчка – Использовать значение данного параметра как искомую фразу поиска.

/G:файл – Позволяет получить список строк из заданного документа.

/D:список_папок – Тут через точку с запятой мы можем задать список каталогов, в которых нужно произвести поиск через командную строку.

“искомые_значения” – Собственно, то, что мы ищем.

[диск:][путь]имя_файла — Задаем путь к документу (документам)

Что бы разделить между собой искомые фразы, между ними вставляется пробел, если параметр не содержит префикса /C. Например,

FINDSTR «Привет мир»

ищет «Привет» или «мир» в файле , а команда

FINDSTR /C:»Привет мир»

ищет фразу «Привет мир» в  файле

Регулярные выражения являются своеобразным бонусом, которым не то, что оболочка, но и язык программирования не всегда может похвастаться. При поиске из командной строки, регулярные выражения позволяют задавать собственные шаблоны (для справки по некоторым значениям введите в cmd findstr/? ), они также используются в сценариях сервера Windows Script Host, за это отвечает отдельный объект.

Синтаксис Grep

Синтаксис команды выглядит следующим образом:

$ grep [опции] шаблон [имя файла…]

Синтаксис Grep

Или:

$ команда | grep [опции] шаблон

  • Опции — это дополнительные параметры, с помощью которых указывается различные настройки, поиска и вывода, например количество строк или режим инверсии.
  • Шаблон — это любая строка или регулярное выражение, по которому будет вестись поиск
  • Файл и команда — это то место где будет вестись поиск. Как вы увидите дальше grep позволяет искать в нескольких файлах и даже в каталоге используя рекурсивный режим.
Синтаксис Grep

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

Использование горячих клавиш в терминале Linux

Командная строка Windows — руководство по использованию

Список горячих клавиш зависит от конкретного дистрибутива и оболочки консоли, но в общем случае он выглядит следующим образом:

  • «Ctrl + Alt + T» — запуск терминала;
  • «Ctrl + S» — остановка вывода в оболочке bash;
  • «Ctrl + Q» — возврат вывода данных;
  • «Ctrl + L» — очистка экрана ото всех записей;
  • «Ctrl + W» — вырезание слова перед курсором;
  • «Ctrl + K» — вырезание строки после курсора;
  • «Ctrl + U» — вырезание строки перед курсором.

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

Удаление файлов и папок

Обычное удаление файла:

rm /etc/

Если с помощью обычного rm попробовать удалить папку в которой находятся файлы, появится ошибка. Для удаление папок используем другую команду:

rmdir backup

Добавляем атрибут -p для удаление пустых папок по всему пути. Будут удалены все три папки указанные ниже, если они не содержат файлов:

rmdir -p backup/one/two

Ошибка папки при удалении в Linux

Иногда при удалении папки в Linux пишется ошибка:

rmdir: не удалось удалить «название_папки»: Нет такого файла или каталога

При этом зайти в неё тоже не удаётся, пишется ровно противоположное:

-bash: cd: /название_папки: Нет такого файла или каталога

Также встречаются ошибки:

rm: невозможно удалить «/home/admin/web/public_html»: Это каталогrmdir: не удалось удалить «/home/admin/web/public_html»: Каталог не пуст

Удалить эту капризную папку (без предупреждений) поможет следующая команда:

rm -rf backup

или так:

rm -rf /home/admin/web/public_html

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

Удалить всё внутри папки

Зайти внутрь папки:

cd folder

Удалить все в этой папке:

sudo rm -rf ./*

Удаление файлов из директории Linux без удаления самой папки

Удаляем всё содержимое из папки files, которая находится по этому пути – /home/user/files/. Специальные ключи в команде ускоряют удаление содержимого с минимальной нагрузкой на сервер.

find /home/user/files/ -mindepth 1 -a -print0 | xargs -n 100 -0 rm -rf

Удалить все файлы кроме одного конкретного файла

rm -v !("")

Удалит все файлы, кроме одного. Эта команда не удаляет папки.

Как открыть терминал в Ubuntu

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

Но пользователям, уровень работы за компьютером которых можно оценить как продвинутый, все-же необходимо время от времени использовать терминал для решения различных задач, ведь программ и утилит без графического интерфейса в среде Linux огромное множество и они зачастую более функциональны и наглядны в использовании, нежели софт имеющий GUI (графический интерфейс). А у некоторых и вовсе нет адекватных аналогов с интерфейсом.

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

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

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

Как открыть терминал в Ubuntu

Я и сам в данном блоге постоянно отсылаю читателя к каким-либо действиям в терминале, но до сих пор не дал развернутого ответа — как его открыть, а это ведь основа основ.

Текстовая консоль

Начну, пожалуй, со святая святых — текстовой консоли.

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

Для работы с ней не нужна графическая подсистема с графической средой окружения, и в ней можно продолжить работу, даже удалив с компьютера графический сервер X, либо среду окружения такую, как GNOME или KDE.

Чтобы получить доступ к текстовым терминалам в Ubuntu нужно использовать комбинации клавиш CTRL+ALT+F1 — CTRL+ALT+F6. Первая консоль — F1, далее F2 и так до F6.

Получается, что можно одновременно использовать до шести рабочих окружений с авторизованными в них шестью пользователями. На седьмой консоли — CTRL+ALT+F7 обычно находится графический терминал — привычная система с окнами и мышкой.

И именно CTRL+ALT+F7 нужно нажать, чтобы вернуться к привычному окружению после работы с консолью.

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

Как открыть терминал в Ubuntu

Эмулятор терминала

Горячие клавиши

  • В Ubuntu для открытия терминала по умолчанию используется комбинация горячих клавиш CTRL+ALT+T.
  • После нажатия комбинации откроется окно с приглашением терминала от имени текущего пользователя — это значит, что команды в данном терминале будут выполняться от имени того, кто в данной момент авторизован в системе.

Для исполнения команд от имени суперпользователя необходимо перед командой прописывать sudo. Это специальная программа, которая позволяет подменить пользователя для выполнения вслед идущей команды. По умолчанию в Ubuntu она подменяет пользователя на суперпользователя (root), чтобы можно было работать в терминале с его привилегиями. Это необходимо, например, для установки программ через apt.

При использовании sudo необходимо будет ввести пароль администратора системы, который был указан при ее установке (в большинстве случаев — пароль единственного пользователя системы).

Использование команды «Выполнить»

  1. В системе также есть специальный диалог, который открывается по нажатию комбинации клавиш ALT+F2 и позволяет запустить произвольную программу введя ее название.
  2. Для различных графических окружений название стандартного эмулятора терминала будет различным, приведу самые распространенные:
  • Gnome — gnome-terminal
  • Xfce — xfce4-terminal
  • Kde — konsole
  • Unity — gnome-terminal
  • Эмулятор терминала, установленный во всех версиях *buntu по умолчанию — xterm

Меню приложений

Как открыть терминал в Ubuntu

В любой системе эмулятор терминала можно найти и с помощью меню приложений. Это то меню, из которого пользователь запускает свои программы, такие как браузер или текстовый редактор. В меню терминал будет иметь название «Эмулятор терминала» или «Терминал» или же «Terminal emulator» — по-английски.

Я использую окружение рабочего стола XFCE и приведу пример в его меню приложений:

↓ Ещё по теме