2010-01-05 2 views
1

Я пытаюсь автоматизировать процессы, которые я должен делать снова и снова, в которых я должен разбирать выходные данные из функции оболочки, искать 5 разных вещей, а затем поместить их в файлВыполняйте полный поток работы над скриптом bash

Я знаю, что может соответствовать моделям с Grep однако я не знаю, как сохранить результат на переменном, так что я могу использовать его после :( я также должен разобрать этот тот же самый вывод получить остальные 5 значений

Я не имею ни малейшего представления о том, как использовать один и тот же выход для 5 Grep-х мне нужно сделать, а затем сохранить его до 5 различных переменных для после использования

Я знаю, что я должен создать красивый и аккуратный .sh, но я не знаю, как это сделать

В настоящее время им пытаются это

#!/bin/bash 
data=$(cat file) 
lol=$(echo data|grep red) 
echo $lol 

не работает, какие-либо идеи?

ответ

1

Вы можете использовать следующий синтаксис:

VAR=$(grep foo bar) 

или альтернативно:

VAR=`grep foo bar` 
+0

можно назвать Grep на другой вар? , такой как VAR = $ (grep foo bar) VAR2 = $ (VAR | grep other bar) ? – perrohunter

+0

Нет, но вы можете использовать регулярное выражение для переменных или (менее предпочтительное для меня) записать переменную в файл и grep. –

+1

Нет, но вы можете эхо, что var и grep вывод эха: 'VAR2 = $ (echo $ VAR | grep other)'. Обратите внимание на '$ VAR'. – slebetman

1

Проще всего сделать было бы перенаправить вывод функции в файл. Затем вы можете запустить несколько greps и удалить файл только после того, как вы закончите с ним.

Чтобы сохранить вывод, вы хотите использовать подстановку команд. Это запускает команду, а затем преобразует вывод в параметр командной строки. В сочетании с переменным назначением вы получаете:

variable=$(grep expression file) 
3

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

если вы раскошелиться функции называется FUNC1

func1(){ 
    echo "things i want to get are here" 
} 

func1 | grep -E "things|want|are|here|get" > outputfile.txt 

Обновление:

Ваш код

#!/bin/bash 
data=$(cat file) 
lol=$(echo data|grep red) 
echo $lol 

практически просто означает, что этот

lol=$(grep "red" file) 

или

lol=$(awk '/red/' file) 

также, если вы планируете использовать Баш, это один из способов вы можете сделать это

while read -r myline 
do 
    case "$myline" in 
     *"red"*) echo "$myline" >> output.txt 
    esac 
done <file 
1

Ваша вторая линия является неправильным , Измените его так:

lol=$(echo "$data"|grep red) 
0

использовать egrep istead of grep.

переменные = $ (задать расширенную "exp1 | exp2 | exp3 | exp4 | exp5" файл)

+0

'grep' позволяет использовать дизъюнктивные rexps с помощью« \ | » для разделения альтернатив. Это 'fgrep' имеет фиксированные строки. –

Смежные вопросы