1

Как из файла вытащить пароль? накидайте седом. Горю

есть файл например 123.txt В нем несколько строчек но есть вот такая ISC_PASSWORD="пароль"

Как мне вытащить пароль? что бы на выходе только он был? Что бы я потом этот односторок в скрипт ставил passw="sedом вытаскиваем пароль"

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

2

/tmp/ cat 123.txt 
qwert 123
qwer ISC_PASSWORD="пароль" qwert123
123 qwerty
/tmp/ sed '/ISC_PASSWORD/!d;s/\(.*ISC_PASSWORD=\"\)\(.*\)\(".*\)/\2/' 123.txt
пароль
Был, был и весь вышел...

3

$ grep -Po "ISC_PASSWORD=\"\K.+(?=\")" 123.txt
Да, у меня Ubuntu.
Нет, не глючит.

4

Короче я понял, где у меня пробел в знаниях. Спасибо всем.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

5

Ещё вариант без sed. По крайней мере он наглядный и понятный:

grep ISC_PASSWORD 123.txt | cut  -d "\"" -f2

6 (03.07.2014 14:08:09 отредактировано tmp13)

Вставлю свои 5 копеек с любимым awk=)

grep ISC_PASSWORD 123.txt | awk -F'=' '{print $2}'

7

tmp13, так кавычки остаются.

8 (03.07.2014 14:16:37 отредактировано Lupo Alberto)

tmp13 пишет:

Вставлю свои 5 копеек с любимым awk=)

grep ISC_PASSWORD 123.txt | awk -F'=' '{print $2}'
tmp/ cat 123.txt
qwert 123
qwer ISC_PASSWORD="пароль" qwert123
123 qwerty
/tmp/ grep ISC_PASSWORD 123.txt | awk -F'=' '{print $2}'
"пароль" qwert123

P.S. awk сам «умеет» искать по шаблону, grep не нужен.

Был, был и весь вышел...

9

Все эти «изыскания» хороши, если формат целевого файла известен и постоянен. Так, к примеру, ни один из способов не сработает с таким файлом:

qwert 123
"qwer" asdf ISC_PASSWORD="пароль" qwert123 "abs"
123 qwerty
Был, был и весь вышел...

10

Lupo Alberto пишет:

Так, к примеру, ни один из способов не сработает с таким файлом:

Чуть регулярку подправить ;-)

$ grep -Po "ISC_PASSWORD=\"\K.+?(?=\")" 123.txt
Да, у меня Ubuntu.
Нет, не глючит.

11

-=Serj=- пишет:

Чуть регулярку подправить ;-)

Это понятно.

P.S. В zsh не работает  aq

Был, был и весь вышел...

12 (03.07.2014 14:53:03 отредактировано -=Serj=-)

Lupo Alberto пишет:

Это понятно.

Я имел в виду, что теперь она правильная и универсальная. Кажись =D.

Lupo Alberto пишет:

P.S. В zsh не работает

Хм, а так?

$ grep -Po 'ISC_PASSWORD="\K.+?(?=")' 123.txt
Да, у меня Ubuntu.
Нет, не глючит.

13

-=Serj=- пишет:

Хм, а так?

$ grep -Po 'ISC_PASSWORD="\K.+?(?=")' 123.txt

 Консоль:
grep -Po 'ISC_PASSWORD="\K.+?(?=")' 123.txt
grep: заданы конфликтующие образцы

Был, был и весь вышел...

14

-=Serj=- пишет:

Я имел в виду, что теперь она правильная и универсальная. Кажись =D.

перловые регэкспы — это ни как не «универсально» — исключительно гнутое расширение...

95% процентов проблем находятся между клавиатурой и стулом.

15

-=Serj=- пишет:

Я имел в виду, что теперь она правильная и универсальная. Кажись =D.

«Ален ноби, ностра алис! Что означает - если один человек построил, другой завсегда разобрать может!» ©

Если в пароле есть знак «"», то не работает  bm

Был, был и весь вышел...

16

Lupo Alberto пишет:

Если в пароле есть знак «"», то не работает  bm

Я, по-моему, сумел нарисовать краба.

Был, был и весь вышел...

17

Fat-Zer пишет:

перловые регэкспы — это ни как не «универсально» — исключительно гнутое расширение...

Я про то, что регулярка универсальна по отношению к формату файла.
Lupo Alberto, последний вариант..

$ grep -Po 'ISC_PASSWORD=\"\K.+?(?=\")' 123.txt
Да, у меня Ubuntu.
Нет, не глючит.

18

-=Serj=- пишет:

последний вариант..

Lupo Alberto пишет:

Если в пароле есть знак «"», то не работает

Был, был и весь вышел...

19 (03.07.2014 15:19:36 отредактировано Lupo Alberto)

lupo@asus-x201e tmp]$ cat 123.txt 
qwert 123
asd ISC_PASSWORD="aaa"bbb" "dsa"
123 qwerty
[lupo@asus-x201e tmp]$ sed '/ISC_PASSWORD/!d;s/\(.*ISC_PASSWORD=\"\)\(.*\)\("\ .*\)/\2/' 123.txt
aaa"bbb
[lupo@asus-x201e tmp]$ grep -Po 'ISC_PASSWORD=\"\K.+?(?=\")' 123.txt
aaa
Был, был и весь вышел...

20

Lupo Alberto пишет:

Если в пароле есть знак «"», то не работает

$ grep -Po 'ISC_PASSWORD=\"\K.+?(?=\" )' 123.txt

ae

Да, у меня Ubuntu.
Нет, не глючит.

21

Lupo Alberto пишет:

[lupo@asus-x201e tmp]$ sed '/ISC_PASSWORD/!d;s/\(.*ISC_PASSWORD=\"\)\(.*\)\("\ .*\)/\2/' 123.txt

Бэкслеш не на месте?

Да, у меня Ubuntu.
Нет, не глючит.

22 (03.07.2014 15:40:42 отредактировано Lupo Alberto)

-=Serj=- пишет:

Бэкслеш не на месте?

Да, после него пробел. По уму бы надо, чтобы искал двойные кавычки, после которых любое количество пробелов или табуляций, либо конец строки.

P.S. Я не программист.
P.S.S. Придёт drBatty всех меня с моими попытками писать на sed морально унизит. ac
P.S.S.S.

Lupo Alberto пишет:

Все эти «изыскания» хороши, если формат целевого файла известен и постоянен.

Был, был и весь вышел...

23

P.S.S.S.S. Тем более, ТС вроде бы и так доволен  ag

Был, был и весь вышел...

24

Lupo Alberto пишет:

Да, после него пробел.

Не, я про то, что он должен быть перед кавычками.

Lupo Alberto пишет:

По уму бы надо, чтобы искал двойные кавычки, после которых любое количество пробелов или табуляций, либо конец строки.

$ grep -Po 'ISC_PASSWORD=\"\K.+?(?=\"(\s|$))' 123.txt
Lupo Alberto пишет:

P.S.S.S.S. Тем более, ТС вроде бы и так доволен 

Ну, тогда мы тем более имеем полное право помериться... регэкспами! ag

Да, у меня Ubuntu.
Нет, не глючит.

25

-=Serj=- пишет:

Не, я про то, что он должен быть перед кавычками.

Вроде не надо, и так работает.

 Консоль:
[lupo@asus-x201e tmp]$ sed '/ISC_PASSWORD/!d;s/\(.*ISC_PASSWORD=\"\)\(.*\)\("\ .*\)/\2/' 123.txt
aaa"bbb

Был, был и весь вышел...

26

-=Serj=- пишет:

Ну, тогда мы тем более имеем полное право помериться... регэкспами! ag

Увы, в данном случае «ваше кунг-фу сильнее моего»  ak

Был, был и весь вышел...

27

Lupo Alberto пишет:

Вроде не надо, и так работает.

Тогда и перед первой двойной кавычкой убрать?

Lupo Alberto пишет:

Увы, в данном случае «ваше кунг-фу сильнее моего»

Не, ну мы ж не ради выяснения, чей кунг-фу эмм.. сильнее)

Да, у меня Ubuntu.
Нет, не глючит.

28

Lupo Alberto пишет:

По уму бы надо, чтобы искал двойные кавычки, после которых любое количество пробелов или табуляций, либо конец строки.

а если в пароле пробел после кавычек...
да и по уму не надо пароль открытым текстом хранить...

-=Serj=- пишет:

Я про то, что регулярка универсальна по отношению к формату файла.

такой не бывает bx
на вскидку пара моментов, где оно может сломаться ИРЛ
1. не учтено, что строка может быть закоментирована
2. не учтены пробелы до/после равно...
3. может быть ещё переменная DEFAULT_ISC_PASSWORD

Lupo Alberto пишет:

P.S.S. Придёт drBatty всех меня с моими попытками писать на sed морально унизит.

я могу попробовать это сделать... правда тогда он уже будет придираться ко мне, что я это не правильно делаю... да и не получится у меня... т.е. я могу просто выкинуть шлак и показать как это втрое короче записать:
sed -ne 's/ISC_PASSWORD="\(.*\)"/\1/p'

95% процентов проблем находятся между клавиатурой и стулом.

29 (03.07.2014 16:55:04 отредактировано Lupo Alberto)

Fat-Zer пишет:

я могу попробовать это сделать... правда тогда он уже будет придираться ко мне, что я это не правильно делаю... да и не получится у меня... т.е. я могу просто выкинуть шлак и показать как это втрое короче записать:
sed -ne 's/ISC_PASSWORD="\(.*\)"/\1/p'

Не сейчас...

[lupo@asus-x201e tmp]$ cat 123.txt 
qwert 123
asd ISC_PASSWORD="aaabbb" dsa 
123 qwerty
[lupo@asus-x201e tmp]$ sed -ne 's/ISC_PASSWORD="\(.*\)"/\1/p' 123.txt 
asd aaabbb dsa
Был, был и весь вышел...

30 (03.07.2014 16:59:59 отредактировано Lupo Alberto)

sed -ne 's/.*ISC_PASSWORD="\(.*\)".*/\1/p' 123.txt

P.S. Тоже не работает для всех случаев.

Был, был и весь вышел...