【问题标题】:Stop printing to standart output after reaching pattern达到图案后停止打印到标准输出
【发布时间】:2014-05-18 12:11:58
【问题描述】:

文件到达图案后如何停止打印?

pattern='...........'
cat file | <command> $pattern

示例: 文件内容:

aaaaaaaaa
aaaaaaaaa
.........
bbbbbbbb
bbbbbbbbb
bbbbbbbbb
.237813981238

想要的输出:

aaaaaaaaa
aaaaaaaaa

【问题讨论】:

  • 在您的问题中,您在不同的行中写了aaaaabbbb..... 等。但是请注意解析器如何将其更改为一行,其中字段由空格分隔。您的模式以及您编写的每一行是否代表文件中的不同行?如果是这样,请在每行前使用 4 个空格。

标签: cat


【解决方案1】:

如果您的模式确实是文件中的一行,那么您的问题与question 5227295 重复:

 cat file | sed -n '/_pattern_/q;p'

请注意,您可能需要对_pattern_ 中的某些字符进行转义,以使其按预期工作(即,如果您的模式有.... 中的点,则应编写\.\.\.\.)。

如果你的模式可能在一行的中间,那么,在纯 Bash 中:

contents=$(<file)
echo "${contents%%_pattern_*}"

使用...........(或您的模式)而不是_pattern_。请注意,这一次您不需要转义模式。

【讨论】:

    【解决方案2】:

    试试这个:

    export PATTERN_ESCAPED=`echo $PATTERN | sed -e 's/[]\/$*.^|[]/\\&/g'`
    cat file | sed -r 's/'"$PATTERN_ESCAPED"'.*//'
    

    第一行转义了所有可能用作正则表达式一部分的符号。第二个将模式和其后的所有符号替换为空。

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 2018-12-25
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 2015-08-31
      相关资源
      最近更新 更多