【问题标题】:Grep Usage helpGrep 使用帮助
【发布时间】:2009-07-02 13:38:30
【问题描述】:

我想使用 grep 查找语料库中的所有标题,我想找到 : 之前的所有内容,然后忽略之后的所有内容。有谁知道这是怎么做到的吗? (能否给我完整的代码行)

【问题讨论】:

  • 您能否提供输入和所需输出的示例?
  • 输入是一个带有长标题的垃圾邮件列表,输出是一个标题到:如抄送:或收件人:的文件
  • 当我到达立方体时会发布我所拥有的
  • 这里是我的 grep -h "^[a-zA-Z]*:" * |排序 -u > headers.txt
  • list=echo * 用于 $ 列表中的文件;做; x=egrep -n -m 1 "^$" $file | sed's/://';头 --lines=$x $file | egrep -0 "^[a-zA-Z]*:" |排序 -u > $file.header

标签: linux grep header


【解决方案1】:

使用 sed 或 awk。

一个 sed 示例:

sed -e '/^[^:]*$/d' -e 's/\(.*\):.*/\1/' filename

【讨论】:

    【解决方案2】:

    如果您只想显示匹配行的第一部分,那么您可以说

    grep your_pattern | cut -d: -f 1
    

    但是如果您不想匹配冒号后的数据,您需要一个不同的工具。有许多可用的工具sedawkperlpython 等。例如,Perl 代码看起来像这样

    perl -nle '($s) = split /:/; print $s if $s =~ /your_pattern/'
    

    或更长的脚本版本:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    while (my $line = <>) {
        my $substring = split /:/, $line;
        if ($substring =~ /your_pattern/) {
            print "$substring\n";
        }
    }
    

    【讨论】:

      【解决方案3】:

      (我不确定我是否完全理解你的问题)

      您必须使用“grep”和“cut”,一种解决方案(尽管远非完美)是:

      $ 猫文件 | grep ':' |剪切 -f 1 -d ':'

      【讨论】:

        【解决方案4】:

        sed -n '/^$/q;/:/{s/:.*/:/;p;}'

        这将在处理完所有标题后停止。

        编辑:稍微改进的版本:

        sed -n '/^$/q;/^[^ :\t]{1,}:/{s/:.*/:/;p;}'

        【讨论】:

          猜你喜欢
          • 2014-02-14
          • 1970-01-01
          • 1970-01-01
          • 2021-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多