匹配后在线打印所有内容

时间:2011-03-18 00:46:55

标签: bash grep

我有一个大文本文件,中间包含一个唯一的字符串。我想要做的是使用grep打印字符串之后的所有内容。

cat textfile | grep "target_string"
This highlights target_string but prints the whole file

cat textfile | grep -o "target_string"
This prints only target_string

cat textfile | grep -o "target_string*"
This prints only target_string

如何在target_string之后打印所有内容?之前什么也没有?

4 个答案:

答案 0 :(得分:28)

使用GNU grep,尝试-B0 -A999999999或类似。更好的选择可能是awk

awk '/target_string/ {seen = 1}
     seen            {print}'

如果(您的问题规格略显不清楚),您也不需要打印匹配的行,sed甚至更短:

sed '1,/target_string/d'

答案 1 :(得分:23)

奇怪的是,接受的答案打印出整行,我只想要目标字符串后面的所有信息。这对我有用:

sed -n 's/target_string//p' filename

改编自this post

答案 2 :(得分:20)

你忘记了'。':

    cat textfile | grep -o "target_string.*"

答案 3 :(得分:2)

这将在每场比赛后打印所有内容,仅在同一行上打印:

perl -lne 'print $1 if /target_string(.*)/' textfile

这样做也是如此,除了它还会打印所有后续行:

perl -lne 'if ($found){print} else{if (/target_string(.*)/){print $1; $found++}}' textfile