返回文本文件中字符串的一部分

返回文本文件中字符串的一部分

背景:

所有日志都转至 csv 以便 mysql 导入。

有大量包含以下数据的日志:

Moon,Srv-1,2016-04-04 06:59:48,Entry #103 (s) test (AlphaNum_Need_This_32_Char_Long1),Msg On (ref2357 : Act)
Moon,Srv-2,2016-03-04 06:59:48,Entry #2  SomeLongtest (AlphaNum_Need_This_32_Char_Long2),Msg On (ref2357 : Act)

问题:

  1. 如何提取:

    AlphaNum_Need_This_32_Char_Long1
    AlphaNum_Need_This_32_Char_Long2
    

或者

  1. 丢弃该零件Entry #103 (s) test

    => 问题是,该文本的长度和字符与 alpha、num、( { } [ ] ( ) / \ . < ># @ _ -

现在的进展:

  • sed可以使用和提取所有其他字段awk
  • 在 Excel 中,这将解决问题 {其中文本为 D4}:

    =MID(D4,SEARCH("),",D4)-32,32)
    

到目前为止,一直使用 MS Logparser,反转字符串,搜索计数 32 个字符等。

目标:不要使用 Windows 日志解析器,全部在 Linux 中完成。

答案1

sed -r 's/^.*\((.{32})\).*$/\1/' filename

答案2

在 Perl 中,如果使用负索引,则可以从右侧开始计算字符:

perl -aF, -lne 'print substr $F[3], -33, 32' < input
  • -n逐行读取输入
  • -a将输入拆分到@F数组中
  • -F指定要拆分的内容
  • -l为打印添加换行符

相关内容