sed + как получить второе слово (строку) после разделителя "=" с помощью sed - PullRequest
8 голосов
/ 22 июля 2010

как получить второе слово (строку) после разделителя "=" через sed (нужно игнорировать пробелы)

например

   echo " bla bla word word1 = strin1 string2 " | sed .....

Я должен получить строку2

другой пример

    echo " bla bla word word1 =swhsw 123  " | sed .....

Я должен получить 123

Ответы [ 3 ]

12 голосов
/ 22 июля 2010

Я считаю, awk - лучшее решение для этого случая, просто используйте.

echo "bla bla word word1 = strin1 string2" | awk -F"=" '{print $2}' | awk '{print $2}'
6 голосов
/ 22 июля 2010
$ echo " bla bla word word1 = strin1 string2 " | sed 's/.[^=]*=\(.[^ \t]*\)[ \t]*\(.[^ \t]*\)\(.*\)/\2/'
string2


$ echo " bla bla word word1 =swhsw 123  " | awk -F"=" '{split($2,a," ");print a[2]}'
123

А как насчет того, чтобы начать читать о том, как использовать sed / awk ?

3 голосов
/ 04 ноября 2013

Этот ответ - чистый GNU SED:

export text=" bla bla word word1 = string1 string2 string3 ";
echo "$text" | sed 's/.*= \?[a-zA-Z0-9]* \([a-zA-Z0-9]*\).*/\1/';

Я немного изменяю строку, потому что возможно иметь больше слов, правила изменятся, если это слово не последнее.

Давайте объясним это:

  1. .*=: все символы перед знаком равенства.
  2. .*= /?: это основная часть, после равенства я оставляю пробел ипоставить / ?, это означает один или ноль вхождений, не знаю, оставите ли вы здесь пробел.
  3. [a-zA-Z0-9]* все вхождения az AZ 0-9, слово (string1).
  4. \([a-zA-Z0-9]*\) снова получите все вхождения a-zA-z0-9, второе слово.
  5. \).* все остальные вещи.
  6. /\1/ будетвыведите все, что вы между \ (\).

Надеюсь, это кому-нибудь поможет.

...