Intereting Posts
udev клавиатура переназначения с hwdb NumLock 0 Какова правильная доступная энтропия в системах UNIX? backspace не работает при запуске c ++-программы как разбить строку после и перед пространством в сценарии оболочки? Доступ к файловой системе iPhone через Linux / Unix Фоновый процесс PID Как установить графический интерфейс в версии сервера Ubuntu 16.04? Повторно введите пространство имен PID 1 При установке пакета я могу предоставить разрешение на запись для определенных файлов? / etc / sudoers проблема, конфиг работает на машине B, но не на A Как я могу использовать два загрузочных дистрибутива Linux, сохраняя один в качестве основного и постоянно меняя второй? Как просмотреть несколько групп пользователей с помощью sssd? Как перенаправить разных пользователей по различным туннелям OpenVPN в Linux? Удалить строку, соответствующую шаблону, если следующая строка не соответствует другому шаблону Как установить отдельные настройки глобальной / пользовательской клавиатуры в LXDE?

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

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

blah blah blah Photo for (702049679 - blah blah blah 

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

 grep "Photo for" logFile 

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

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

Регулярное регулярное выражение лучше обрабатывается с помощью 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