Как извлечь подстроку, начинающуюся и заканчивающуюся пользовательскими специальными символами из строки в linux? - PullRequest
2 голосов
/ 04 августа 2011

Я работаю над сценариями Linux и хочу извлечь подстроку из главной строки, как показано в следующем примере: -

Основная строка =

2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#    

Что мне нужно:-

Подстрока =

13b11254    

Я просто хочу прочитать и извлечь то, что находится между специальными символами ^ ^.

Этот код будет использоваться в сценарии linux.

Ответы [ 4 ]

1 голос
/ 04 августа 2011

Вы также можете использовать массивы bash и разделитель полей:

IFS="^"
s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
array=($s)
echo ${array[1]}

Это позволяет проверить, есть ли у вас ровно 2 разделителя:

if [ ${#array[*]} -ne 3 ]
then
  echo error
else
  echo ok
fi
1 голос
/ 04 августа 2011

Использование стандартной оболочки расширение параметра :

% s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#' ss=${s#*^} ss=${ss%^*}
% printf '%s\n' "$ss"                                                                  
13b11254
1 голос
/ 04 августа 2011

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

s='2011-12-03 11:04:22#Alex#Audrino^13b11254^Townville#USA#'
echo $s | cut -d '^' -f 2
0 голосов
/ 04 августа 2011

POSIX sh совместимый:

temp="${string#*^}"
printf "%s\n" "${temp%^*}"

Предполагается, что ^ используется только 2 раза на строку как два разделителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...