【问题标题】:Pattern match at a specific column number with a particular string . No delimiter or separator特定列号与特定字符串的模式匹配。没有分隔符或分隔符
【发布时间】:2020-08-04 07:47:36
【问题描述】:

我想搜索一个文件以输出与特定列号处的特定值匹配的行。不涉及分隔符。例如:

IloveA
IloveB
IloveC
IloveA
IloveD
IloveA
Ilove A

输出:

IloveA
IloveA
IloveA

这里需要注意的重要一点是,只有当 A 出现在第 6 列时才应该打印。

【问题讨论】:

标签: shell unix sh


【解决方案1】:

使用grep '^.....A' 或更一般的grep -E '^.{5}A'

【讨论】:

    【解决方案2】:

    据我了解,您需要打印与前 5 个字符范围内的模式匹配的行,但前提是第 6th 字符是 A。这可以分两步完成:

    • 过滤掉第6个th字符等于A的行,同时捕获前5个字符;
    • 如果捕获的序列与您的模式匹配,则打印该行。

    以下是上述在 Perl 中的示例实现:

    perl -l -n -e 'print if /^(.{5})A/ and $1 =~ /ove/' input-file.txt
    

    如果该行匹配/^(.{5})A/,则Perl 代码打印从文件中读取的下一行(隐式参数$_)。由于capturing$1(第一个也是唯一的捕获组)包含前五个字符。然后,如果 $1 匹配 /ove/(您可以更改的示例模式),则第二个 if 条件为真,并且该行将打印到标准输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多