2014-02-19 2 views
1

Из этого содержания (в файле):печати часть строки регулярных выражений Баш

myspecificBhost.fqdn.com myspecificaBhost.fqdn.com myspecificzBhost.fqdn.com

мне нужно распечатать следующие 4 символа из "B":

Bhost

Я попробовал:

echo ${var:position1:lenght} 

но позиция 1 никогда не равна

+0

ли содержимое файла должно быть много -линия? «Bhost» появляется 3 раза в той же строке, что и в настоящее время отформатирован. Если он появляется несколько раз в строке, вы хотите, чтобы все совпадения, или только первый? Вы хотите _any_ 4 символа после «B», или просто буквы, буквы или цифры, ...? – mklement0

+0

Никогда не сравнимо с чем? И как «позиция1» и «длина», и какие значения? Кроме того, это вообще не связано с регулярными выражениями. – chepner

ответ

0

Попробуйте с:

cat file | grep -o B.... 
+0

Бесполезное использование 'cat' spotted. –

1

попробовать sed команду:

sed -nr '/.*c(.{4,6}).*/s//\1/p' input.txt | cut -c2-6 
RESULT: 
Bhost 

С grep команды:

cat input.txt | grep -o B.... | head -1 
RESULT: 
Bhost 
+1

Обратите внимание, что вы можете пропустить 'cat' и напрямую использовать' grep -o B ... input.xt' – fedorqui

+0

Да ... Спасибо ,,, :) – MLSC

2

Использование BASH регулярное выражение:

s='myspecificBhost.fqdn.com myspecificaBhost.fqdn.com myspecificzBhost.fqdn.com' 
[[ "$s" =~ (B[a-z][a-z][a-z][a-z]) ]] && echo "${BASH_REMATCH[1]}" 
Bhost 
+2

очень хорошие ответы – MLSC

+1

Мне не разрешено повышать вас .. 30 upvoted today ... – MLSC

+1

@MortezaLSC: Спасибо, вы очень желанны. Ваши слова достаточно обнадеживают. – anubhava

0

Bash с помощью подстановки параметров. Выходы 4 символов после первого 'B':

text='myspecificBhost.fqdn.com myspecificaBhost.fqdn.com myspecificzBhost.fqdn.com' 

text=${text#*B} 
text=${text:0:4} 
echo "${text}" 

Выход:

host 

Чтобы получить ведущую 'B' использовать

echo "B${text}" 
Смежные вопросы