Команда rev
Linux переворачивает строки текста. Эта команда может работать с предоставленным текстом или файлом, и это кажется обманчиво простым. Но, как и многие утилиты командной строки, его реальная сила становится очевидной, когда вы комбинируете его с другими командами.
Команда rev
является одной из тех простых утилит Linux, которые, на первый взгляд, кажутся странными. Он выполняет одну функцию: он переворачивает строки. И кроме возможности распечатать страницу быстрой справки ( -h
) и показать ее номер версии ( -V
), она не принимает никаких параметров командной строки .
Итак, rev
меняет строки, и все? Нет вариантов или вариантов? Ну да и нет. Да, у него нет перестановок, но нет, это далеко не все. Из этого туториала вы узнаете, как объединить его для мощных операций.
Когда вы используете rev
в качестве строительного блока в более сложных последовательностях команд, он действительно начинает показывать свою ценность. rev
— это одна из групп команд (таких как tac
и yes
), которые являются фасилитаторами. Проще оценить их полезность, когда вы увидите, как они делают использование других команд более эффективным.
Использование команды rev
Используемый в командной строке без других параметров, rev
принимает любой типизированный ввод, переворачивает его и затем печатает в окне терминала. Он продолжает делать это, пока вы не нажмете Ctrl + C, чтобы выйти.
оборот
Если вы наберете какой-нибудь текст и нажмете Enter, он заставит rev
напечатать строку в обратном порядке — если, конечно, вы не предоставите палиндром .
Передача текста в rev
Вы можете использовать echo
для передачи текста в rev
.
эхо один два три | оборот
Вы также можете использовать rev
чтобы построчно перевернуть содержимое всего файла текста. В этом примере у нас есть файл, содержащий список имен файлов. Файл называется «filelist.txt».
rev filelist.txt
Каждая строка читается из файла, переворачивается, а затем печатается в окне терминала.
Комбинирование rev с другими командами
Вот пример использования конвейера ввода, который дважды вызывает rev
.
Эта команда удаляет последний символ из строки текста. Это может быть полезно для удаления знаков препинания. Нам нужно использовать команду cut
чтобы удалить символ .
эхо 'Удалить пунктуацию.' | рев | вырезать -c 2- | оборот
Давайте разберемся с этим.
-
echo
отправляет строку в первый вызовrev
. -
rev
переворачивает строку и отправляет ее вcut
. - Опция
-c
(символы) указываетcut
возвращать последовательность символов из строки. - Опция
2-
указываетcut
на возврат диапазона символов от символа два до конца строки. Если было указано второе число, например2-5
, диапазон будет от двух до пяти символов. Никакое второе число не означает «до конца строки». - Перевернутая строка — минус ее первый символ — передается в
rev
которая переворачивает строку, поэтому она возвращается к своему первоначальному порядку.
Поскольку мы обрезали первый символ обратной строки, мы обрезали последний символ исходной строки. Да, вы можете сделать это с помощью sed
или awk
, но это более простой синтаксис.
Отделение последнего слова
Мы можем использовать аналогичный трюк, чтобы вернуть последнее слово в строке.
Команда похожа на последнюю: опять же, она использует rev
дважды. Различия заключаются в том, как команда cut
используется для выбора фрагментов текста.
эхо «отделить последнее слово» | рев | cut -d '' -f1 | оборот
Вот разбивка команды:
-
echo
отправляет строку в первый вызовrev
. -
rev
переворачивает строку и отправляет ее вcut
. - Опция
-d' '
(разделитель) указываетcut
возвращать последовательность символов, разделенных пробелом. - Опция
-f1
указываетcut
возвращать первый раздел строки, не содержащий разделитель. Другими словами, первая часть предложения до первого пробела. - Обратное первое слово передается в
rev
который переворачивает строку, поэтому он возвращается к своему первоначальному порядку.
Поскольку мы извлекли первое слово обратной строки, мы обрезали последнее слово исходной строки. Последнее слово в предложении было «слово», и оно распечатано для нас.
Обрезка контента из файлов
Допустим, у нас есть файл, содержащий список имен файлов, а имена файлов заключены в кавычки. Мы хотим удалить кавычки из имен файлов.
Давайте посмотрим на файл:
меньше filelist.txt
Содержание файла отображается для нас less
.
Мы можем удалить пунктуацию с обоих концов каждой строки с помощью следующей команды. Эта команда использует оба rev
и cut
дважды.
rev filelist.txt | вырезать -c 2- | рев | cut -c 2-
Имена файлов указаны для нас без кавычек.
Команда разбивается так:
-
rev
переворачивает строки в файле и передает их вcut
. - Опция
-c
(символы) указываетcut
возвращать последовательность символов из каждой строки. - Опция
2-
указываетcut
на возврат диапазона символов от символа два до конца каждой строки. - Перевернутые строки, за исключением их первых символов, передаются в
rev.
-
rev
переворачивает строки, поэтому они возвращаются к своему первоначальному порядку. Ониcut
во второй раз. - Опция
-c
(символы) указываетcut
возвращать последовательность символов из каждой строки. - Опция
2-
указываетcut
на возврат диапазона символов от символа два до конца каждой строки. Это «перепрыгивает» через начальную кавычку, которая является символом один в каждой строке.
Много трубопроводов
Вот команда, которая возвращает отсортированный список всех расширений файлов в текущем каталоге. Он использует пять различных команд Linux.
ls | рев | cut -d '.' -f1 | рев | сортировать | уник
Процесс прост:
-
ls
перечисляет файлы в текущем каталоге. Они переданы вrev
. -
rev
меняет имена файлов и передает их вcut
. -
cut
возвращает первую часть каждого имени файла вплоть до разделителя.-d'.'
указываетcut
использовать точку «.» в качестве разделителя. Часть обращенных имен файлов до первого периода — это расширения файлов. Они переданы вrev
. -
rev
восстанавливает расширения файлов в их первоначальном порядке. Они переданы вsort
. -
sort
сортирует расширения файлов и передает результаты вuniq
. -
uniq
возвращает один листинг для каждого типа уникального расширения файла. Обратите внимание, что если расширение файла отсутствует (например, для make-файла и каталогов Справка и gc_help), в списке будет указано все имя файла.
Чтобы сделать последний штрих, добавьте параметр командной строки -c
(count) в команду uniq
.
ls | рев | cut -d '.' -f1 | рев | сортировать | uniq -c
Теперь мы получаем отсортированный список файлов разных типов в текущем каталоге со счетчиком каждого.
Это довольно изящный однострочник!
Заниматься спортом
Иногда вам нужно идти назад, чтобы идти вперед. И вы обычно идете вперед быстрее всего как часть команды.
Добавьте rev
в свой список команд go-to, и вы скоро будете использовать его для упрощения иным образом сложных последовательностей команд.