Unix Kornshell-如何打印从某个字符串开始到文件结尾的文件?

Unix Kornshell-如何打印从某个字符串开始到文件结尾的文件?,unix,sed,ksh,Unix,Sed,Ksh,我目前正在使用KSH 有一个包含文本的文件,并表示我们正在该文本中查找某个字符串。 您将如何打印该文件的内容,从该字符串开始一直打印到文件末尾 我知道, sed '/\(pattern\).*/{s//\1/; q;}' 将从头开始打印文件,直到找到字符串为止。我试着换了它,我想那是行不通的 谢谢你, Vincent您可以使用awk awk '/pattern/ {f=1} f' file 当找到模式时,将flagf设置为true。 如果标志f为真,则打印该行 与range版本相比,我更喜欢

我目前正在使用KSH

有一个包含文本的文件,并表示我们正在该文本中查找某个字符串。
您将如何打印该文件的内容,从该字符串开始一直打印到文件末尾

我知道,

sed '/\(pattern\).*/{s//\1/; q;}'
将从头开始打印文件,直到找到字符串为止。我试着换了它,我想那是行不通的

谢谢你,

Vincent

您可以使用
awk

awk '/pattern/ {f=1} f' file
当找到
模式
时,将flag
f
设置为true。
如果标志
f
为真,则打印该行

与range版本相比,我更喜欢这个版本,因为如果您有其他测试要做,它会更灵活


另一个
awk
使用范围

awk '/pattern/,0' file
这里的
end
模式永远不会变为true,因此在找到
start
模式后,它不会停止打印


将范围与
sed一起使用

sed -n '/pattern/,$p' file

图案和行的其余部分打印。我的模式是
yo

cat file
Here is my data
What do you like
I like ice creem
通过sed

sed -n '/pattern/,/&/p' file
如果要打印图案旁边的所有文本,请按照以下示例进行操作

$ cat ccc
foo
blah bar blah
gjhj
jjhk

$ sed -n '/ bar /,/&/p' ccc | sed -r 's/^.* (bar.*)$/\1/g'
bar blah
gjhj
jjhk
并通过
awk

$ awk '/ bar / {sub (/^.*bar/,"bar"); f=1} f' ccc
bar blah
gjhj
jjhk
,

如果你想正确安排日期,那么试试这个

$ cal 6 2014 | awk 'NR==1{print} NR==2{print} / 20 / {sub (/^.*20/,"               20"); f=1} f'
     June 2014        
Su Mo Tu We Th Fr Sa  
               20 21  
22 23 24 25 26 27 28  
29 30  

谢谢你的回复!我使用过这段代码,它确实可以工作,但是它会打印出整行代码。如果图案从中间开始,我怎样才能从那里开始打印呢?谢谢!这是越来越接近我试图打印出来。我目前正在尝试使用“cal”和“sed”打印日历中的某个日期。我正在尝试类似于,
cal 6 2014 | sed-n'/20/,/&/p'ccc | sed-r/^.*(20.*)$/\1/g'
但这给了我一个不同于我预期的输出。我正在尝试获得类似于2014年6月的东西。对不起,我是新来使用这种格式的,我正在尝试使它看起来更整洁。是的,这正是我想要的!但是有没有办法让20和21在Fr和Sa下排列?从20岁开始只是我想到的一个例子。我实际上是用$day来替换20,这样我就可以输入我想要的任何数字了。这个
$cal6 2014 | awk'NR==1{print}NR==2{print}/20/{sub(/^.*20/,“20”);f=1}f'
怎么样?我刚刚试了你发布的最新的一个,它打印出了和以前一样的东西,20和21在Su和MoThank下,请你回复!这将打印出包含特定字符串的整行。我怎样才能从那个字符串开始打印呢?而不是从行首开始。
awk-F“pattern”'NF>1{F=1;打印FS$2;next}F'
这应该打印
pattern
和该行的其余部分,以及所有下一行。见我更新的帖子。
$ cal 6 2014 | awk 'NR==1{print} NR==2{print} / 20 / {sub (/^.*20/,"20"); f=1} f'
     June 2014        
Su Mo Tu We Th Fr Sa  
20 21  
22 23 24 25 26 27 28  
29 30   
$ cal 6 2014 | awk 'NR==1{print} NR==2{print} / 20 / {sub (/^.*20/,"               20"); f=1} f'
     June 2014        
Su Mo Tu We Th Fr Sa  
               20 21  
22 23 24 25 26 27 28  
29 30