Awk / grep / sed получает разделенный запятыми список чисел из строк текста

У меня есть файл журнала, который имеет строки, которые выглядят следующим образом:

blah blah blah Photo for (702049679 - blah blah blah 

Теперь я знаю, что могу получить все строки из этого файла:

 grep "Photo for" logFile 

Но как я могу взять эти строки и получить разделенный запятой список каждого номера после круглой скобки в одной выходной строке (они будут вставлены в SQL-запрос)?

Цифры, о которых идет речь, будут первым вводом строки числовых символов длиной 9 или более цифр. В идеальном случае его можно было бы сопоставить с использованием этих критериев или критериев первого числа, происходящего после «Фото для (текст).

3 Solutions collect form web for “Awk / grep / sed получает разделенный запятыми список чисел из строк текста”

Регулярное регулярное выражение лучше обрабатывается с помощью Perl, например

 grep "Photo for" logFile | perl -pe 's/.*Photo for ((\d+).*/\1/' | tr '\n' ',' 

Если Perl не может быть и речи:

 grep "Photo for" logFile | awk '{sub(/.*Photo for \(/,"",$0);sub(/[ ].*/,"");print $0}' | tr '\n' ',' 

Альтернатива, которая использует только Perl и соответствует указанным критериям:

 perl -ne ' /Photo for/ && /([0-9]{9,})/ && push @numbers,$1; END{ $" = ","; print "@numbers" } ' logFile 

Это напечатает список, разделенный запятыми, первое вхождение непрерывной цифровой строки, состоящей из 9 или более цифр в каждой строке, соответствующей Photo for .

1) нужен gnu grep

 grep -iPo "(?<=Photo for \()[0-9]+" logFile|tr "\n" "," 

2) Использование awk

 awk -F \( '/Photo for/{split($2,a,OFS);printf a[1] ","}' logFile 
  • Удалить строковый файл после пробела
  • SED переключающие столбцы в одном файле, ограниченном,
  • Объединить следующую строку с предыдущей строкой
  • Сценарий оболочки для списка заблокированных пакетов во FreeBSD
  • Как использовать sed для управления потоковым потоком?
  • sed Удалить строки, заканчивающиеся на %
  • Как удалить переменную строку в файле
  • Как извлечь XML из текстового файла
  • печатать строки, если разделенные запятыми поля совпадают в другой строке
  • Как добавить парсеры вокруг текста
  • Китайские иероглифы, а не латинский, записываются в файл
  • Linux и Unix - лучшая ОС в мире.