Удалить начало строки linux

Работа со строками в bash

Все переменные bash по умолчанию рассматриваются как символьные строки. Поэтому во время работы над сценарием bash придется манипулировать строковыми переменными различными способами.

Строковые переменные в Bash

Важный момент: при работе со строковыми переменными рекомендуется заключать их в двойные кавычки (например, «$var1»). Это связано с тем, что bash может применить разделение слов при расширении переменной, если она не заключена в кавычки. Если строка, хранящаяся в переменной без кавычек, содержит пробелы, строка может быть разделена пробелами и рассматриваться как несколько строк, в зависимости от контекста (например, когда строковая переменная используется в качестве аргумента функции).

Конкатенация двух строк в Bash

В bash нет специального оператора, объединяющего две строки. Чтобы объединить две строковые переменные в bash, необходимо просто поместить одну переменную за другой без какого-либо специального оператора между ними.

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

HOST=http://example.com URI="/list/" ID=128 url1="$HOST$URI$ID" # конкатенировать строковые переменные url2="$HOST$URI$/feed" # объединить строковую переменную со строковым литералом echo "URL1: $url1" echo "URL2: $url2"
URL1: http://example.com/list/128 URL2: http://example.com/list/128/feed

Добавление строки к переменной в Bash

Этот сценарий аналогичен конкатенации строк. Более простой способ — использовать встроенный оператор +=. При использовании со строковыми операндами оператор += добавляет строку к переменной, как показано ниже.

var1="Linux" var2="!" var1+=" the best" # добавить строковый литерал var1+="$var2" # добавить строковую переменную echo $var1

Сравнение двух строк в Bash

Для сравнения используются операторы ‘==’ или ‘!=’ для проверки равенства или неравенства двух строк (или строковых переменных) в bash. Если использовать одинарные скобки в условии, возможно так же использовать ‘=’ в качестве оператора равенства. Но оператор ‘=’ не допускается внутри двойных круглых скобок.

# Все следующие форматы являются допустимыми. if [ "$var1" == "demo" ]; then echo "Это хорошо" fi if [ "$var1" = "demo" ]; then echo "Это хорошо" fi if [ "$var1" != "$var2" ]; then echo "Это плохо" fi if (( "$var1" == "demo" )); then echo "Это нормально" fi

Получить длину строки в Bash

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

str_var="Это пример строки" len=$ len=$(expr length "$str_var")

Удаление символа переноса строки в Bash

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

Читайте также:  Suse linux kernel headers

Это выражение подразумевает, что если «строка» содержит символ в конце, хранящийся в «var», то результатом выражения станет «строка» без этого символа. Например:

# входная строка с завершающим символом новой строки input_line=$'Это примерная строка\n' # определите символ конца строки. Для возврата каретки замените его на $'\r' character=$'\n' echo -e "($input_line)" # удалить символ новой строки input_line=$ echo -e "($input_line)"

Обрезание пробелов вначале и конце строки в Bash

Удалить из строки символы пробела в начале или в конце строки возможно с использованием команды sed.

var_str=" Это пример строки " # исходная строка с пробелами echo -e "($var_str)" # обрезать пробелмы вначале строки var_str=$(echo "$var_str" | sed -e "s/^[[:space:]]*//") echo -e "($var_str)" # обрезать пробелы в конце строки var_str=$(echo "$var_str" | sed -e "s/[[:space:]]*$//") echo -e "($var_str)"

Для упрощения аналогичных задач, возможно использовать функцию bash

trim() < local var="$*" # удаляем пробелы var="$">" # удалить прбелы в конце строки var="$">" echo "$var" > my_str=" Это пример строки " echo "($my_str)" my_str=$(trim $my_str) echo "($my_str)"

Удаление префикса, суффикса или любой подстроки из строки в Bash

Команда sed позволяет удалять любую подстроку из строки. Пример ниже показывает, как можно удалить префикс, суффикс или все вхождения подстроки из строковой переменной.

Если подстрока содержит какой-либо специальный символ (например, ‘[‘ и ‘]’ в данном примере), то в sed его необходимо экранировать с помощью ‘\’.

var_str="[DEBUG] Device0 is not a valid input [EOL]" prefix="\[DEBUG\]" suffix="\[EOL\]" substring="valid" echo "$var_str" # удалить префикс из строки var_str=$(echo "$var_str" | sed -e "s/^$prefix//") echo "$var_str" # удалить суффикс из строки var_str=$(echo "$var_str" | sed -e "s/$suffix$//") echo "$var_str" # удалить подстроку из строки var_str=$(echo "$var_str" | sed -e "s/$substring//") echo "$var_str"

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

var_str="[DEBUG] Device0 is not a valid input [EOL]" prefix="[DEBUG]" suffix="[EOL]" # удалите префиксную строку var_str=$ echo "$var_str" # удалить суффиксную строку var_str=$ echo "$var_str"

Проверьте, начинается ли строка с подстроки в Bash

Если необходимо проверить, начинается ли строковая переменная с префикса, существует несколько способов сделать это, как показано ниже.

var1="Этот текст" prefix="Это" case $var1 in $prefix*) echo "1. \"$var1\" начинается с \"$prefix\"" esac if [[ $var1 =~ ^$prefix ]]; then echo "2. \"$var1\" начинается с \"$prefix\"" fi if [[ $var1 == $prefix* ]]; then echo "3. \"$var1\" начинается с \"$prefix\"" fi if [[ $var1 == This* ]]; then echo "4. \"$var1\" начинается с \"This\"" fi

Проверить заканчивается ли строка подстрокой в Bash

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

var1="Этот текст" suffix="текст" case $var1 in *$suffix) echo "1. \"$var1\" заканчивается на \"$suffix\"" esac if [[ $var1 =~ $suffix$ ]]; then echo "2. \"$var1\" заканчивается на \"$suffix\"" fi if [[ $var1 == *$suffix ]]; then echo "3. \"$var1\" заканчивается на \"$suffix\"" fi if [[ $var1 == *text ]]; then echo "4. \"$var1\" заканчивается на \"text\"" fi

Проверка соответствия строки регулярному выражению в Bash

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

pattern="длину \s+6+" # регулярное выражение для подстроки var1="Эти данные имеют длину 1000" var2="Эти данные не действительны" if [[ $var1 =~ $pattern ]]; then echo "$var1: длина найдена" else echo "$var1: длина не найдена" fi if [[ $var2 =~ $pattern ]]; then echo "$var2: длина найдена" else echo "$var2: длина не найдена" fi

Разделить строку в Bash

Для разделения строки в bash используется команда read, которая считывает одну строку строки из stdin и разделяет строку по разделителю. Разделенные элементы затем сохраняются либо в массиве, либо в отдельных переменных, переданных командой read. По умолчанию разделителем являются символы ‘ ‘, ‘\t’, ‘\r’, ‘\n’. Необходимо разделить строку по собственному символу, можно указать разделитель в переменной IFS перед вызовом команды read.

# строки для разделения var1="зеленый оранжевый черный фиолетовый" var2="зеленый:оранжевый:черный:фиолетовый" # разделить строку на один или несколько пробелов и сохранить результат в массиве read -a my_array "; do echo $elem done # разделить строку с помощью пользовательского разделителя IFS=':' read -a my_array2 "; do echo $elem done

Замена строки на другую строку в Bash

Если необходимо заменить строку на другую строку в bash, можно использовать функцию расширения параметров bash.

var1="Это очень плохая строка" substring="плохая" # заменяемая строка replacement="хорошая" # заменяемая строка var2="$" echo $var2

Удаление всего текста после символа в Bash

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

Читайте также:  Softperfect wifi guard linux

Приведенное выше выражение означает, что если «слово» совпадает частью «строки», то результатом этого выражения станет «строка» без совпавшего шаблона. Например:

url="http://example.com:1234" delimeter=":" # удалите весь текст, начиная с разделителя result=$ echo $result

Удаление всего текста перед символом в Bash

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

Приведенное выше выражение означает, что если «строка» содержит текст, заканчивающийся на «слово», то результатом этого выражения станет «строка» без (самого длинного) совпадающего шаблона. Самый длинный совпадающий шаблон означает, что если «строка» содержит несколько экземпляров «слова», то совпадающий шаблон должен содержать их все. Например:

# удалите весь текст, предшествующий и включающий символ разделитель url="http://example.com:1234" delimeter=":" result=$ echo $result

В приведенном выше примере исходная строка содержит два два разделителя ‘:’. Поскольку мы используем самый длинный шаблон, совпадающим содержимым является «http://example.com:», а не «http:», и, следовательно, результат («1234») — это то, что остается после удаления совпадающего содержимого.

Похожие записи:

Источник

Removing First and Last Characters From Strings in Bash

From the following article, you’ll learn how to remove first characters from the beginning of each line in Bash and how to print strings between first and last characters using cut command.

You’ll also learn how to remove last characters of each line using trick with reverse command.

I’ve created a file with the following content and I’ll use it in examples below. So lets say we need to remove first and last characters of each line from the given file.

$ cat file 12345===I Love Bash===54321 12345===I Love Bash===54321 12345===I Love Bash===54321

Remove First N Characters Of Each Line

Use the following command to delete first 5 characters of each line (trim first 5 characters and print each line starting from the 6th character):

$ cat file | cut -c 6- ===I Love Bash===54321 ===I Love Bash===54321 ===I Love Bash===54321

Use the following command to print strings between 9th and 20th characters of each line in Bash:

$ cat file | cut -c 9-20 I Love Bash I Love Bash I Love Bash

Use the following command to print first 20 characters of each line in Bash:

$ cat file | cut -c 1-20 12345===I Love Bash 12345===I Love Bash 12345===I Love Bash

Remove Last Character Of Each Line

Using combination of reverse and cut commands we can remove last N characters of each line, as shown below. (source)

Читайте также:  Softperfect wifi guard linux

Use the following command to delete last character of each line in Bash:

$ rev file | cut -c 2- | rev 12345===I Love Bash===5432 12345===I Love Bash===5432 12345===I Love Bash===5432

Remove Last N Characters Of Each Line

Use the following command to delete last 8 characters of each line in Bash:

$ rev file | cut -c 9- | rev 12345===I Love Bash 12345===I Love Bash 12345===I Love Bash

Источник

Оцените статью
Adblock
detector