Ваш grep -Eo ",rds:"
терпит неудачу по разным причинам:
- Вы не добавили
"
в строку для совпадения
Между запятой и rds вы должны соответствовать символу. - Вы пытаетесь сопоставить запятую, которая может быть в предыдущей строке
Ваш пример ввода состоит из 2 строк (с новой строкой между), возможно, реальный ввод без перевода строки. - Вы хотите соответствовать до следующей двойной кавычки.
Вы можете поддерживать оба стиля ввода (с / без перевода строки) с помощью
grep -Eo '(,|^)"rds:[^"]*' rdsfile |cut -d'"' -f2
Вы можете сделать это в одномкоманда с
sed -rn 's/.*(,|^)"(rds:[^"]*).*/\2/p' rdsfile
РЕДАКТИРОВАТЬ: Управление стандартным выводом, а не файл с аналогичными командами:
yourcommand | grep -Eo '(,|^)"rds:[^"]*' |cut -d'"' -f2
# or
yourcommand | sed -rn 's/.*(,|^)"(rds:[^"]*).*/\2/p'
Вы также можете проверить исходные команды с помощью yourcommand > rdsfile
.
Вы можетеобратите внимание, что в rdsfile отсутствуют данные, которые вы видели на экране, в этом случае добавьте 2>&1
yourcommand 2>&1 | grep -Eo '(,|^)"rds:[^"]*' |cut -d'"' -f2
# or
yourcommand 2>&1 | sed -rn 's/.*(,|^)"(rds:[^"]*).*/\2/p'