2015-10-08 15 views
-1

у меня есть следующая строкаизвлечения строки после согласования шаблона с использованием оболочки Bash

1234 1 xyz123 4321 1 456778 32124 1 abbba 56789 1 hfhfn456 

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

abbba 
456778 
hfhfn456 
xyz123 

с помощью оболочки bash, awk или sed или grep это возможно?

+1

Вы хотите напечатать эти конкретные поля или хотите ли вы назначить каждую отдельную переменную или что? Вы сами пытались решить эту проблему? Если да, в чем проблема, с которой вы сталкиваетесь? –

+1

Каков шаблон, который вам нужен, чтобы найти эти строки? – Barmar

+1

Кажется, это просто, используя 'awk'. Прокрутите поля в строке. Если поле соответствует шаблону, напечатайте следующее поле. [ – Barmar

ответ

0

Возможно, вы найдете awk для этой задачи. Это идея утилита для обработки столбчатых данных:

#!/bin/sh 

string="1234 1 xyz123 4321 1 456778 32124 1 abbba 56789 1 hfhfn456" 
match1=$(echo "$string" | awk '{print $9}') 
match2=$(echo "$string" | awk '{print $6}') 
match3=$(echo "$string" | awk '{print $12}') 
match4=$(echo "$string" | awk '{print $3}') 


echo "$match1" 
echo "$match2" 
echo "$match3" 
echo "$match4" 

сравнить их значения против каждого определенного набора:

#!/bin/sh 

#abbba 
#456778 
#hfhfn456 
#xyz123 

string="1234 1 xyz123 4321 1 456778 32124 1 abbba 56789 1 hfhfn456" 
match1=$(echo "$string" | awk '{print $9}') 
match2=$(echo "$string" | awk '{print $6}') 
match3=$(echo "$string" | awk '{print $12}') 
match4=$(echo "$string" | awk '{print $3}') 

if [ "$match1" = "abbba" ] 
then echo "match1 is abbba" 
fi 
if [ "$match2" = "456778" ] 
then echo "match2 is 456778" 
fi 
if [ "$match3" = "hfhfn456" ] 
then echo "match3 is hfhfn456" 
fi 
if [ "$match4" = "xyz123" ] 
then echo "match4 is xyz123" 
fi 
0

Если GNU Coreutils установлены и порядок, в котором результаты перечислены Безразлично «т имеет значения, вы могли бы также уйти с cut и tr:

echo "1234 1 xyz123 4321 1 456778 32124 1 abbba 56789 1 hfhfn456" | \ 
    cut -d' ' -f'3,6,9,12' | tr " " "\n" 

Выход:

abbba 
456778 
hfhfn456 
xyz123