2013-07-02 2 views
0

Как я могу заставить это работать?Соответствие шаблону переменной Grep

#!/bin/bash 
SOMETHING=$(egrep '^ something' /some/dir/file.conf | awk -F '.' '{print $1}' | awk '{print $2}') 

if [ $SOMETHING = 123 ]; then 
    echo "Found 123" 
    else 
    echo "Cannot find 123" && exit 1 
fi 

Результаты grep, жалующиеся на синтаксическую ошибку. Это не нравится '^ something'

+1

Что вы хотите, чтобы оно соответствовало точно? – Yossarian

+1

отредактируйте ваш вопрос с примерами пожалуйста. 'grep | awk | cut' не должен быть лучшим способом. – Kent

+0

mv 'SOMETHING = $ (egrep '^ something' somefile.conf | awk '{print $ 4}' | cut -c1-3)' над тестом, а затем просто поместите '$ SOMETHING' в тест. – demure

ответ

2

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

SOMETHING=$(awk '/^ something/{print substr($4, 1, 3);}' somefile.conf) 
if [ "$SOMETHING" = "123" ]; then 
    echo "Found 123" 
else 
    echo "Cannot find 123" && exit 1 
fi 

EDIT: Похоже, вы редактировали вопрос и сценарий после того, как я отправил свой Anser. Вот модифицированная команда awk для вашего последнего редактирования (не делайте этого повторно PLS):

SOMETHING=$(awk -F "." '/^ something/{split($1, a, " "); print a[2]}' somefile.conf) 
Смежные вопросы