Поиск по сайту:
Педагог — это инженер человеческих душ (М.И. Калинин).

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

30.08.2024
Как работать с подстроками в 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

 

Читать  Команда Timeout в Bash без ненужной задержки

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

$ 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

 

Читать  Как открыть файл bz2?

Без опции -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

 

Читать  Конвейер в Unix или Linux

Использование расширения параметров 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 предоставляют вам множество полезных опций.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Год 2024 ознаменовался масштабными работами по укладке асфальта на территории…

Спасибо!

Теперь редакторы в курсе.