Command-Line

awk/grep/sed 從文本行中獲取逗號分隔的數字列表

  • January 31, 2014

我有一個日誌文件,其中包含如下所示的行:

blah blah blah Photo for (702049679 - blah blah blah

現在我知道我可以通過執行以下操作從文件中獲取所有類似的行:

grep "Photo for" logFile

但是我怎樣才能獲取這些行並在單個輸出行中的括號後獲取每個數字的逗號分隔列表(這些將被粘貼到 SQL 查詢中)?

有問題的數字將是第一次出現 9 位或更多位長的數字字元串。理想情況下,它可以使用該標准進行匹配,或者在“Photo for (”文本之後出現的第一個數字的標準。

這種複雜的正則表達式最好用 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

引用自:https://unix.stackexchange.com/questions/111771