ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Как работать с подстроками в Linux

Как работать с подстроками в Linux

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

 

Полные слова или части строк

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

 

Полные слова и подстроки

Один из самых простых способов выделить слово из сегмента текста на основе его позиции (например, 3-етретье слово) — это использовать команду awk. Например, чтобы извлечь третье слово из фразы, вы могли бы использовать команду awk, подобную этой:

$ echo "Focus on Peace" | awk '{print $3}'
Peace

 

$ 3 представляет третье слово во фразе, поскольку пробел является разделителем по умолчанию.

Чтобы сделать то же самое с помощью команды cut, вам нужно будет включить разделитель с параметром -d в команду, подобную этой, где -f3 представляет третье слово:

$ echo "Focus on Peace" | cut -d' ' -f3
Peace

 

Вы также можете выбрать несколько полей с помощью команды cut, как показано в следующих примерах:

$ echo "Focus on Peace on Earth" | cut -d' ' -f3,5
Peace Earth
$ echo "one two three 4 5 6" | cut -d' ' -f1-3,6
one two three 6

 

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

$ cut -d':' -f1-3,5,6 /etc/passwd | tail -n 5
justme:x:1004:JustMe:/home/justme
lola:x:1006::/home/lola
dumdum:x:1007::/home/dumdum

 

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

$ cat file
Monday:1 Tuesday:2 Wednesday:3 Thursday:4 Friday:5
$ awk -F'[: ]' '{OFS=" ";print $1,$3,$4}' file
Monday Tuesday 2

 

Выбор подстрок

Чтобы выбрать произвольную последовательность или символы из строки, вы можете использовать команду awk, подобную приведенной ниже, в которой $0 представляет всю фразу целиком, 10 представляет первую позицию символа, которую нужно захватить, а 5 — длину строки, которая будет отображаться.

$ echo "Focus on Peace" | awk '{print substr($0,10,5)}'
Peace

 

Чтобы проделать то же самое с помощью команды вырезать, вам следует использовать команду, подобную этой, в которой из фразы извлекаются и отображаются символы с 13-го по 22-й буквы. ………… и выводятся символы.

$ echo "Linux is an impressive OS" | cut -c 13-22
impressive

 

В следующей команды команда cut выводит на экран 7— й-12тыс. символов из строк в файле. Команда head просто ограничивает отображение первыми 4 строками вывода.

$ cut -c 7-12 sayings | head -4
with 3
and ov
nd be
and be

 

Использование grep

Вы можете использовать команду grep для выбора нескольких слов из файла. В этом примере отображаются только выбранные слова, а не целые строки. Это связано с тем, что используется опция -o (отображать только совпадающие элементы).

$ cat sayings | grep -o "quarrel\|empty"
quarrel
quarrel
empty

 

Без опции -o вы бы увидели полные строки.

$ cat sayings | grep "quarrel\|empty"
They do not quarrel,
So no one quarrels with them.
Is that an empty saying?

 

Вы также можете выбирать фразы из нескольких слов, как показано в этом примере:

$ cat sayings | grep -o "never falter\|do not quarrel"
never falter
do not quarrel

 

Использование expr

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

$ str="Learning to use Linux is fun"
$ expr substr "$str" 13 9
use Linux

 

Использование sed

Команда sed предоставляет очень удобный способ замены слов в строке.

$ echo "They never falter" | sed 's/falter/forget/'
They never forget

 

Вы также можете использовать эту команду для замены нескольких слов, как в этом примере:

$ echo "They never falter" | sed 's/never falter/always forget/'
They always forget

 

Использование xargs

Чтобы удалить пробелы в начале и конце фраз, используйте команду xargs.

$ echo "  Keep your nose to the grindstone " | xargs
Keep your nose to the grindstone

 

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

$ cat eg


           Keep your nose to the grindstone
$ cat eg | xargs
Keep your nose to the grindstone

 

Использование расширения параметров bash

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

$ string="Happy days are here again"
$ echo ${string:1:10}
appy days
$ echo ${string:0:9}
Happy days

 

Обратите внимание, что приведенный выше пример ясно показывает, что этот метод начинает нумерацию позиций с 0. Итак, в следующем примере 7 представляет восьмой символ в строке, а -2 означает удаление последних 2 символов. В результате подстрока в первом примере ниже содержит один символ, а во втором — все, кроме последних двух.

$ string="1234567890"
$ echo ${string:7:-2}
8
$ echo ${string:0:-2}
12345678

 

В следующем примере мы сначала создаем переменную с помощью “set –”, а затем используем команду echo для отображения восьмого и девятого символов. Другими словами, он начинается с восьмого символа (7), а затем отображает два символа.

$ set -- 01234567890abcdef
$ echo ${1:7:2}
78

 

ПРИМЕЧАНИЕ: Вы могли бы отобразить строку, созданную с помощью set», просто используя команду «echo $1”. Это то, на что ссылается “1” в приведенном выше примере.

$ set -- 01234567890abcdef
$ echo $1
01234567890abcdef

 

Подведение итогов

Linux предоставляет множество команд, которые помогут вам манипулировать текстом. Команды awkcutgrepexprsed и xargs наряду с расширением параметров bash предоставляют вам множество полезных опций.

Exit mobile version