Поиск по сайту:

Как использовать команду rev в Linux


Команда Linux rev переворачивает текстовые строки. Эта команда может работать как с предоставленным текстом, так и с файлом, и она кажется обманчиво простой. Но, как и во многих утилитах командной строки, его реальная мощь становится очевидной, когда вы комбинируете его с другими командами.

Команда rev — одна из тех простых утилит Linux, которые на первый взгляд кажутся чем-то странным. Он выполняет единственную функцию: переворачивает строки. Помимо возможности распечатать страницу справки (-h) и показать номер версии (-V), он не принимает никаких параметров командной строки. .

Итак, rev переворачивает строки, и все? Никаких вариаций и вариантов? Ну да и нет. Да, у него нет перестановок, но нет, это далеко не все. В этом руководстве показано, как комбинировать его для мощных операций.

Когда вы используете rev в качестве строительного блока в более сложных последовательностях команд, он действительно начинает показывать свою ценность. rev — это одна из групп команд (таких как tac и yes), которые являются помощниками. Их полезность легче оценить, когда вы видите, как они делают использование других команд более эффективным.

Использование команды rev

Используемый в командной строке без других параметров, rev принимает любой вводимый текст, переворачивает его и затем печатает в окне терминала. Это продолжается до тех пор, пока вы не нажмете Ctrl+C для выхода.

rev

Если вы наберете текст и нажмете Enter, rev напечатает строку в обратном порядке — если, конечно, вы не предоставите ей палиндром.

Передача текста в версию

Вы можете использовать echo для передачи текста в rev.

echo one two three | rev

Вы также можете использовать rev, чтобы перевернуть содержимое всего текстового файла, строка за строкой. В этом примере у нас есть файл, содержащий список имен файлов. Файл называется «filelist.txt».

rev filelist.txt

Каждая строка считывается из файла, переворачивается и затем выводится в окно терминала.

Сочетание rev с другими командами

Вот пример использования конвейера ввода, который дважды вызывает rev.

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

echo 'Remove punctuation.' | rev | cut -c 2- | rev

Давайте сломаем это.

  • echo отправляет строку в первый вызов rev.
  • rev переворачивает строку и передает ее в cut.
  • Параметр -c (символы) указывает cut вернуть последовательность символов из строки.
  • Параметр 2- указывает cut вернуть диапазон символов от второго до конца строки. Если бы был указан второй номер, например 2-5, диапазон был бы от двух до пяти символов. Никакое второе число не означает «до конца строки».
  • Перевернутая строка (за вычетом первого символа) передается в rev, который переворачивает строку и возвращает ее к исходному порядку.

Поскольку мы обрезали первый символ перевернутой строки, мы обрезали последний символ исходной строки. Да, вы можете сделать это с помощью sed или awk, но это более простой синтаксис.

Разделение последнего слова

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

Команда похожа на предыдущую: она снова использует rev дважды. Различия заключаются в том, как команда cut используется для выделения частей текста.

echo 'Separate the last word' | rev | cut -d' ' -f1 | rev

Вот расшифровка команды:

  • echo отправляет строку в первый вызов rev.
  • rev переворачивает строку и передает ее в cut.
  • Параметр -d  (разделитель) указывает cut вернуть последовательность символов, разделенных пробелом.
  • Параметр -f1 указывает cut вернуть первую часть строки, не содержащую разделитель. Другими словами, первая часть предложения до первого пробела.
  • Перевернутое первое слово передается в rev, который переворачивает строку и возвращает ее к исходному порядку.

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

Обрезка содержимого из файлов

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

Посмотрим на файл:

less filelist.txt

Содержимое файла отображается для нас в less.

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

rev filelist.txt | cut -c 2- | rev | cut -c 2-

Имена файлов перечислены для нас без кавычек.

Команда разбивается следующим образом:

  • rev переворачивает строки в файле и направляет их в cut.
  • Параметр -c (символы) указывает cut возвращать последовательность символов из каждой строки.
  • Параметр 2- указывает cut возвращать диапазон символов от второго до конца каждой строки.
  • Перевернутые строки без первых символов передаются в rev.
  • rev меняет местами строки, поэтому они возвращаются к исходному порядку. Они передаются в cut во второй раз.
  • Параметр -c (символы) указывает cut вернуть последовательность символов из каждой строки.
  • Параметр 2- указывает cut возвращать диапазон символов от второго до конца каждой строки. Это «перескакивает» через ведущую кавычку, которая является первым символом в каждой строке.

Много трубопроводов

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

ls | rev | cut -d'.' -f1 | rev | sort | uniq

Процесс прост:

  • ls выводит список файлов в текущем каталоге. Они передаются в rev.
  • rev меняет имена файлов на противоположные и передает их в cut.
  • cut возвращает первую часть каждого имени файла до разделителя. -d. предписывает cut использовать точку «.» как разделитель. Часть перевернутых имен файлов до первой точки является расширениями файлов. Они передаются в rev.
  • rev меняет местами расширения файлов в исходном порядке. Они передаются в sort.
  • sort сортирует расширения файлов и передает результаты в uniq.
  • uniq возвращает один список для каждого типа уникального расширения файла. Обратите внимание, что если расширение файла отсутствует (например, для make-файла и каталогов Help и gc_help), отображается полное имя файла.

Чтобы добавить последний штрих, добавьте параметр командной строки -c (count) в команду uniq.

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

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

Это довольно изящная однострочная строчка!

drawroF og ot drawkcaB gnioG

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

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

RELATED: Best Linux Laptops for Developers and Enthusiasts