распечатать текст между специальными символами в одной строке и удалить начальные и конечные пробелы

Вопрос или проблема

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

Ниже представлен текст On-Line (Prim) для примера. Я хочу извлечь любой текст между “–” 1-м и 2-м вхождением.

Таким образом, у меня есть текст ниже в переменной “VAL1”

IBM Informix Dynamic Server Version 14.10.FC10XA -- On-Line (Prim) -- Up 77 days 23:08:31 -- 130337920 Kbytes

В настоящее время я использую следующее:

echo "$VAL1" | awk -F'--' '$1 ~ /Version/ {print $2}'

Вышеупомянутое дает следующий вывод:

 On-Line (Prim)

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

Таким образом, я попытался использовать следующее, что мне кажется приемлемым:

echo "$VAL1" | awk -F'--' '$1 ~ /Version/ {print $2}' | sed 's/^ //g' | sed 's/ *$//'

Вывод:

On-Line (Prim)

Я хочу знать, есть ли лучший и более простой способ сделать это, который более эффективен?

Просто расширьте ваш разделитель полей с -- на  -- 

echo 'IBM Informix Dynamic Server Version 14.10.FC10XA -- On-Line (Prim) -- Up 77 days 23:08:31 -- 130337920 Kbytes' |
   awk -F' -- ' '{print $2}'
On-Line (Prim)

Или, чтобы распечатать его только в том случае, если в строке есть как минимум 2 вхождения  -- :

echo 'IBM Informix Dynamic Server Version 14.10.FC10XA -- On-Line (Prim) -- Up 77 days 23:08:31 -- 130337920 Kbytes' |
   awk -F' -- ' 'NF > 2 {print $2}'
On-Line (Prim)

Или другой вариант – использовать gsub в awk:

echo 'IBM Informix Dynamic Server Version 14.10.FC10XA -- On-Line (Prim) -- Up 77 days 23:08:31 -- 130337920 Kbytes' | awk -F'--' '{gsub(/^ +| +$/,"",$2);print $2}'
On-Line (Prim)

Ответ или решение

Для решения задачи извлечения текста между специальными символами, в данном случае двойными тире "–", и удаления начальных и конечных пробелов, существует несколько эффективных подходов, которые могут значительно упростить вашу работу.

Проблема

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

IBM Informix Dynamic Server Version 14.10.FC10XA -- On-Line (Prim) -- Up 77 days 23:08:31 -- 130337920 Kbytes

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

Решения

  1. Использование awk с расширенным разделителем:

    Вы можете легко избежать лишних пробелов, изменив разделитель в awk на ' -- ', чтобы учесть пробелы перед и после тире:

    echo "$VAL1" | awk -F' -- ' '{print $2}'

    Это решение эффективно извлекает текст между первым и вторым вхождением " — ", исключая лишние пробелы.

  2. Проверка количества вхождений:

    Если важно убедиться, что в строке как минимум два вхождения " — ", вы можете использовать:

    echo "$VAL1" | awk -F' -- ' 'NF > 2 {print $2}'

    Это условие позволит вам обрабатывать только строки с необходимым количеством разделителей.

  3. Замена пробелов с помощью gsub:

    Альтернативой вышеописанным методам является использование функции gsub в awk. Это позволит вам удалить пробелы по краям текста без необходимости дополнительного вызова команд:

    echo "$VAL1" | awk -F'--' '{gsub(/^ +| +$/, "", $2); print $2}'

    Этот метод также обеспечивает необходимую очистку текста и возвращает только нужную строку.

Заключение

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

Дополнительные рекомендации

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

Следуя этим рекомендациям, вы сможете легко и эффективно обрабатывать текстовые данные и извлекать необходимую информацию.

Оцените материал
Добавить комментарий

Капча загружается...