perl - 如何使正则表达式与 perl 命令一起使用并从文件中提取数字?

标签 perl sed grep

我正在尝试从一个制表符分隔的文件中提取一个我需要存储在变量中的数字。我正在使用一个正则表达式来解决这个问题,这要归功于我能够构建的一些在线研究。

文件组成如下:

0   0   2500    5000
1   5000    7500    10000
2   10000   12500   15000
3   15000   17500   20000
4   20000   22500   25000
5   25000   27500   30000

我需要在给定第一列的数字的情况下提取第二列中的数字。我在线编写并测试了正则表达式:

(?<=5\t).*?(?=\t)

我需要第六行的 25000。

我开始使用 sed,但如您所知,即使使用 -E 选项启用正则表达式的扩展版本,它也不喜欢后视和先行模式.我也尝试过使用 awkgrep,但由于类似的原因失败了。

进一步我发现 perl 可能是正确的命令,但我无法使其正常工作。我正在尝试使用命令

perl -pe '/(?<=5\t).*?(?=\t)/' | INFO.out

但我承认我知识匮乏,我有点迷茫。

下一步是从变量中读取正则表达式中的“5”,所以如果您已经知道可能出现的问题,请告诉我。

最佳答案

无需后视——在空格上拆分每一行并检查第一个字段是否为 5

在 Perl 中有一个方便的命令行选项,-a,每一行都会为我们拆分,我们得到带有字段的@F数组

perl -lanE'say $F[1] if $F[0] == 5' data.txt

请注意,这测试了 5 的数值 (==)

关于perl - 如何使正则表达式与 perl 命令一起使用并从文件中提取数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70018480/

相关文章:

python - 从相对路径确定绝对路径

linux - 从所有子文件夹打印到文件前两行

bash - 在 bash/awk 中检测一系列数字是否连续

linux - grep + 使用正则表达式精确匹配 IP 地址

bash - 选择由某些字符分隔的完整文本 block

json - Bash sqlite3 行 |如何转换成JSON格式

java - 从 UTF-8 base64 编码识别日语

python - 从 Perl 脚本运行 Python 脚本

perl - 如何使用 Perl 的 WWW::Mechanize 访问没有名称或 ID 的表单?

linux - sed 和变量替换