如何在文件到达模式后停止打印?
pattern='...........'
cat file | <command> $pattern
例如: 文件内容:
aaaaaaaaa
aaaaaaaaa
.........
bbbbbbbb
bbbbbbbbb
bbbbbbbbb
.237813981238
期望的输出:
aaaaaaaaa
aaaaaaaaa
答案 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"'.*//'
第一行转义可以用作正则表达式一部分的所有符号。第二个替换模式和后面的所有符号。