Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Примитивный вопрос по GREP / 14 сообщений из 14, страница 1 из 1
24.07.2007, 08:12:39
    #34678756
cooluser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
Есть файл следующего содержания:

param1=value1
param2=value2
...
paramN=valueN

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

проблем в том, что греп работает в двух режимах:
1) Либо выводит всю строку, которая удовлетворяет регулярному выражению
2) Либо выводит только ту часть строки,которая удовлетворяет регулярному выражению

Оба варианта очевидно не подходят, как быть?
...
Рейтинг: 0 / 0
24.07.2007, 08:38:01
    #34678785
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
man sed
...
Рейтинг: 0 / 0
24.07.2007, 08:47:48
    #34678798
cooluser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
Бутылка пива в Новосибирске ждет того, кто приведет конкретный пример команды
...
Рейтинг: 0 / 0
24.07.2007, 09:21:39
    #34678860
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
Код: plaintext
1.
awk -F= ' { gsub(/^[ \t]*/,"",$1);gsub(/[ \t]*$/,"",$1); if ( $1=="param2" ) print $2 }' file.txt

это с отбросом пробелов и табуляций слева и справа в названии параметра ( вдруг ... )
...
Рейтинг: 0 / 0
24.07.2007, 09:24:28
    #34678870
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
Открываем конкурс. Главный приз бутылка пива в Новосибирске

Если использовать sed:

getparam.sh
Код: plaintext
1.
2.
3.
4.
5.
6.
#!/bin/bash

[ "$1" == "" ] && exit

param=$ 1 
sed -n "s/^[[:space:]]*${param}[[:space:]]*=[[:space:]]*//p"

Использовать ./getparam.sh paramname < file
...
Рейтинг: 0 / 0
24.07.2007, 09:35:08
    #34678898
Anton Lukyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
sanek842
Код: plaintext
1.
awk -F= ' { gsub(/^[ \t]*/,"",$1);gsub(/[ \t]*$/,"",$1); if ( $1=="param2" ) print $2 }' file.txt

это с отбросом пробелов и табуляций слева и справа в названии параметра ( вдруг ... )

кажется ошибка, $2 не определяется
имхо, так правильно
awk -F= ' { gsub(/^[ \t]*/,"",$1);gsub(/[ \t]*$/,"",$2); if ( $1=="param2" ) print $2 }' file.txt
...
Рейтинг: 0 / 0
24.07.2007, 09:40:59
    #34678913
Sun_newbie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
:))

С использованием grep:
cat file.txt | grep param1 | awk -F= '{print$2}'
...
Рейтинг: 0 / 0
24.07.2007, 09:44:45
    #34678926
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
Anton Lukyanov sanek842
Код: plaintext
1.
awk -F= ' { gsub(/^[ \t]*/,"",$1);gsub(/[ \t]*$/,"",$1); if ( $1=="param2" ) print $2 }' file.txt

это с отбросом пробелов и табуляций слева и справа в названии параметра ( вдруг ... )

кажется ошибка, $2 не определяется
имхо, так правильно
awk -F= ' { gsub(/^[ \t]*/,"",$1);gsub(/[ \t]*$/,"",$2); if ( $1=="param2" ) print $2 }' file.txt

зачем, нам нужно вычленить только название параметра ( это то что до равно ), поставьте перед равно пробел и исправленный пример работать не будет
А в принципе можно даже проще сделать, обычно название параметра не включает в себя пробелы и имеет смысл наверное целиком исключить пробелы в "1-ой колонке", тогда будет так

awk -F= ' { gsub(/[ \t]/,"",$1); if ( $1=="param2" ) print $2 }' file.txt
...
Рейтинг: 0 / 0
24.07.2007, 10:16:15
    #34679035
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
Sun_newbie:))

С использованием grep:
cat file.txt | grep param1 | awk -F= '{print$2}'

А если файл содержит строки

pparam1 =100
param12 = 1000
param1= 10

?
;-)
...
Рейтинг: 0 / 0
24.07.2007, 13:28:58
    #34679921
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
cooluser wrote:

> как быть?
используйте sed. Должно быть нечто вроде
sed -n 's/^param1=\(.*\)$/\1/p' исходный_файл.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.07.2007, 13:29:25
    #34679923
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
cooluser wrote:

> Бутылка пива в Новосибирске ждет того, кто приведет конкретный пример
> команды
1) далеко.
2) не люблю пиво.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.07.2007, 22:10:10
    #34681704
Sun_newbie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
А если файл содержит строки

pparam1 =100
param12 = 1000
param1= 10


Точнее составить регулярное выражение с названием нужного параметра.
...
Рейтинг: 0 / 0
25.07.2007, 11:27:53
    #34682364
Примитивный вопрос по GREP
cat file.txt | grep "^paramname=" | cut -f 2- -d =
...
Рейтинг: 0 / 0
25.07.2007, 13:43:16
    #34682940
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Примитивный вопрос по GREP
не-даши-без-пароляcat file.txt | grep "^paramname=" | cut -f 2- -d =Я согласен с Арамисом, тут awk нафиг не сдался.
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Примитивный вопрос по GREP / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]