URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 4668
[ Назад ]

Исходное сообщение
"bash получить все слова, заключеные в двойные кавычки"

Отправлено Потапенко , 10-Дек-20 00:22 
Добрый день подскажите пожалуйста
Мне нужно получить все слова, заключеные в двойные кавычки, длина и позиции могут меняться поэтому awk не подходит, с sed пока не разобрался

пробую следующим образом

$echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' | grep -Po ' "\K[^"]*'

вывод

Петров
Сидоров
Васильев

Первую позицию съело потому что перед ней нет пробела
Как получить все вхождения


Содержание

Сообщения в этом обсуждении
"bash получить все слова, заключеные в двойные кавычки"
Отправлено ACCA , 10-Дек-20 02:03 
Разбирая JSON, используй правильный инструмент:

$ echo '{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' | jq -r 'keys []'
Васильев
Иванов
Петров
Сидоров


"bash получить все слова, заключеные в двойные кавычки"
Отправлено barbos , 10-Дек-20 16:54 
>[оверквотинг удален]
> могут меняться поэтому awk не подходит, с sed пока не разобрался
> пробую следующим образом
> $echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' |
> grep -Po ' "\K[^"]*'
> вывод
> Петров
> Сидоров
> Васильев
> Первую позицию съело потому что перед ней нет пробела
> Как получить все вхождения

А если так?
echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' | grep -Po '(\{| )"\K[^"]*'


"bash получить все слова, заключеные в двойные кавычки"
Отправлено fantom , 11-Дек-20 12:34 
> Добрый день подскажите пожалуйста
> Мне нужно получить все слова, заключеные в двойные кавычки, длина и позиции
> могут меняться поэтому awk не подходит, с sed пока не разобрался

И кто вам сказал такую чушь про awk??? Или сами придумали???


echo 'списки всех студентов{"Иванов С.": 2, "Петров У.": 1, "Сидоров": 3, "Васильев": 2}' |awk -F'"' '{for (k=0;k<100;k=k+2) {print $k}}'

> пробую следующим образом
> $echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' |
> grep -Po ' "\K[^"]*'
> вывод
> Петров
> Сидоров
> Васильев
> Первую позицию съело потому что перед ней нет пробела
> Как получить все вхождения


"bash получить все слова, заключеные в двойные кавычки"
Отправлено fantom , 11-Дек-20 12:35 
>> Добрый день подскажите пожалуйста
>> Мне нужно получить все слова, заключеные в двойные кавычки, длина и позиции
>> могут меняться поэтому awk не подходит, с sed пока не разобрался

И кто вам сказал такую чушь про awk??? Или сами придумали???


echo 'списки всех студентов{"Иванов С.": 2, "Петров У.": 1, "Сидоров": 3, "Васильев":
2}' |awk -F'"' '{for (k=0;k<100;k=k+2) {print $k}}'

Иванов С.
Петров У.
Сидоров
Васильев


>> пробую следующим образом
>> $echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' |
>> grep -Po ' "\K[^"]*'
>> вывод
>> Петров
>> Сидоров
>> Васильев
>> Первую позицию съело потому что перед ней нет пробела
>> Как получить все вхождения


"bash получить все слова, заключеные в двойные кавычки"
Отправлено fantom , 11-Дек-20 12:37 
>[оверквотинг удален]
>>> Мне нужно получить все слова, заключеные в двойные кавычки, длина и позиции
>>> могут меняться поэтому awk не подходит, с sed пока не разобрался
>  И кто вам сказал такую чушь про awk??? Или сами придумали???
>  echo 'списки всех студентов{"Иванов С.": 2, "Петров У.": 1, "Сидоров": 3,
> "Васильев":
>  2}' |awk -F'"' '{for (k=0;k<100;k=k+2) {print $k}}'
> Иванов С.
> Петров У.
> Сидоров
> Васильев

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


>>> пробую следующим образом
>>> $echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' |
>>> grep -Po ' "\K[^"]*'
>>> вывод
>>> Петров
>>> Сидоров
>>> Васильев
>>> Первую позицию съело потому что перед ней нет пробела
>>> Как получить все вхождения


"bash получить все слова, заключеные в двойные кавычки"
Отправлено fantom , 11-Дек-20 12:47 
>[оверквотинг удален]
>>  И кто вам сказал такую чушь про awk??? Или сами придумали???
>>  echo 'списки всех студентов{"Иванов С.": 2, "Петров У.": 1, "Сидоров": 3,
>> "Васильев":
>>  2}' |awk -F'"' '{for (k=0;k<100;k=k+2) {print $k}}'
>> Иванов С.
>> Петров У.
>> Сидоров
>> Васильев
> и в строке можете вообще любую ересь впихнуть -- все равно будет
> выдавать строго между двойными кавычками...

Ну и полностью готовый вариант

TEXT='списки всех студентов{"Иванов С.": "2", "Петров У.": 1, "Сидоров": 3, "Васильев": 2}'; IDX=`echo $TEXT|grep -o '"' | wc -l`; echo $TEXT| awk -F'"' -v idx="${IDX}" '{for (k=2;k<=idx;k=k+2) {print $k}}'


>>>> пробую следующим образом
>>>> $echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' |
>>>> grep -Po ' "\K[^"]*'
>>>> вывод
>>>> Петров
>>>> Сидоров
>>>> Васильев
>>>> Первую позицию съело потому что перед ней нет пробела
>>>> Как получить все вхождения


"bash получить все слова, заключеные в двойные кавычки"
Отправлено Потапенко , 13-Дек-20 12:47 
>[оверквотинг удален]
>>> Иванов С.
>>> Петров У.
>>> Сидоров
>>> Васильев
>> и в строке можете вообще любую ересь впихнуть -- все равно будет
>> выдавать строго между двойными кавычками...
> Ну и полностью готовый вариант
> TEXT='списки всех студентов{"Иванов С.": "2", "Петров У.": 1, "Сидоров": 3, "Васильев":
> 2}'; IDX=`echo $TEXT|grep -o '"' | wc -l`; echo $TEXT| awk
> -F'"' -v idx="${IDX}" '{for (k=2;k<=idx;k=k+2) {print $k}}'

Потапенко

>>>>> пробую следующим образом
>>>>> $echo 'списки всех студентов{"Иванов": 2, "Петров": 1, "Сидоров": 3, "Васильев": 2}' |
>>>>> grep -Po ' "\K[^"]*'
>>>>> вывод
>>>>> Петров
>>>>> Сидоров
>>>>> Васильев
>>>>> Первую позицию съело потому что перед ней нет пробела
>>>>> Как получить все вхождения

Спасибо. Классно получилось