使用Bash,Perl和Regex将文本文件中的变量提取到数组中

z32a7ul

我想使用Bash,Perl和Regex从文本文件中提取变量。

该文件如下所示(并且已被读入变量$ str):

Filename: XXXXX
Type: XXX
Size: XXXX
Unimportant thing: XXXX

Filename: YYYYY
Type: YYY
Size: YYYY
Unimportant thing: YYYY

我需要每个块的文件名,类型和大小。数组是最好的,但是包含由给定字符分隔的这些变量的字符串也是可以接受的。

但是,有时某些字段(例如“大小”或“类型”)会丢失。我想省略这些记录,所以我认为我需要一个可以通过多行匹配的正则表达式。

我尝试了以下方法:

perl -pe 's/Filename: ([^\n]*)\nType: ([^\n]*)\nSize: ([^\n]*)\n/\1\t\2\t\3\n/' <<< $str

但这会打印出原始文本,而无需修改。

然后,我尝试了不带p命令行参数的情况(我希望通过这种方式可以处理整个文件,而不是迭代行):

perl -e 's/Filename: ([^\n]*)\nType: ([^\n]*)\nSize: ([^\n]*)\n/\1\t\2\t\3\n/' <<< $str

这一个没有打印任何内容(空结果)。

然后,我尝试在正则表达式前添加打印,因为我认为删除-p可能导致Perl不知道我要打印结果:

perl -e 'print s/Filename: ([^\n]*)\nType: ([^\n]*)\nSize: ([^\n]*)\n/\1\t\2\t\3\n/' <<< $str

仍然没有成功(空结果)。

我想念什么?

更新:

我希望将其作为一行perl命令。

B层

我对Perl的知识很薄,但是由于没有其他人提供过Perl的答案,因此我将尝试一下。

将数据作为文件传递,它将打印制表符分隔的行,每行三个值:

perl -e 'while (<>) { $s .= $_; } chomp $s; @arr = split(/\n{2,}/, $s); foreach my $a(@arr) { $a =~ s/Filename: ([^\n]*)\nType: ([^\n]*)\nSize: ([^\n]*)\n.*/$1\t$2\t$3\n/ || next; print "$a"; } ' infile

结果:

XXXXX   XXX     XXXX
YYYYY   YYY     YYYY

这有点蛮力,但是可以通过将输入分成多个段落/块,然后将多行正则表达式应用于每个行来工作。

细节...

  • while (<>) { $s .= $_; } -将输入插入单个字符串。
  • chomp $s -从字符串中删除结尾的换行符。
  • @arr = split(/\n{2,}/, $s)-在连续的换行符上分割字符串。这将其分解为段落/块。将块存储在数组中。
  • foreach my $a(@arr)-循环遍历每个数组元素(块)。接下来的两行代码将应用于每个块。
  • $a =~ s/Filename: ([^\n]*)\nType: ([^\n]*)\nSize: ([^\n]*)\n.*/$1\t$2\t$3\n/ || next-从三个感兴趣的字段中提取值。如果没有替换发生(意味着正则表达式不匹配,因为例如缺少一个值),则跳过此块并移至下一个。
  • print "$a" -打印替换结果:三个值用制表符分隔。

同样,我不使用太多Perl,因此可能有比这更优雅的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将文本文件的前5行提取到变量中

如何从Watson Assistant将变量提取到文本文件中?

如何使用 Python 将多个文本文件的内容提取到 Pandas 数据框中?

如何使用Python将文本文件中的数据读取到数组中

使用熊猫阅读器将文本文件读取到numpy数组中的问题

使用 Python 將 PDF 文本提取到文本文件中 - 提取錯誤

将文本文件中的数据提取到VBA中的Excel中

使用Shell脚本将文本文件提取到变量

如何从文本文件中将包含字母的行提取到数组中?

如何将 Windows 服务列表及其状态提取到文本文件中?

如何使用bash在文本文件中的标记之间提取和操纵输出

如何使用PLinq将2d文本文件读取到2d数组中

在文本文件中搜索和替换-使用RegEx变量模式

无法将数据形式的文本文件读取到数组中

从文本文件将字符串读取到向量数组中的Char错误C ++

如何将文本文件中的字符串作为标记变量提取到电子表格中

如何将多个文本文件中的特定行提取到Linux上的单个txt文件中?

如何将时间从文本文件提取到另一个文本文件/列表中

使用While循环将大文本文件读取到MATLAB中

如何使用php将文本文件读取到HTML表中?

将列从csv提取到文本文件

从 PHP 中的文本文件中提取变量

PowerShell - 将文本提取到变量中(RegEx?)

将html文本文件提取到文本文件

如何从bash中的文本文件中提取某些单词和值

在 Python 中匹配和从文本文件中提取

从Java文本文件中读取和提取数据

使用Powershell将多行文本文件提取到单行csv

将文本文件读取到数组Java