到达图案后停止打印到标准输出

时间:2014-05-18 12:11:59

标签: cat

如何在文件到达模式后停止打印?

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

例如: 文件内容:

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

期望的输出:

aaaaaaaaa
aaaaaaaaa

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

使用...........(或您的模式)代替_pattern_。注意,这次你不需要花费模式。

答案 1 :(得分:0)

试试这个:

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

第一行转义可以用作正则表达式一部分的所有符号。第二个替换模式和后面的所有符号。