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

时间:2014-06-04 06:50:54

标签: unix sed ksh

我目前正在使用KSH。

其中有一个包含文字的文件,并说我们正在该文字中查找某个字符串。
如何从该特定字符串开始打印该文件的内容到文件末尾?

我知道,

sed '/\(pattern\).*/{s//\1/; q;}'

将从头开始打印文件,直到找到该字符串。我尝试交换它,我想这不起作用。

谢谢你,
文森特

2 个答案:

答案 0 :(得分:0)

您可以使用awk

awk '/pattern/ {f=1} f' file

找到pattern后,将标记f设置为true 如果标记f为true,则打印该行。

我更喜欢这个版本与范围版本比较,因为如果你有其他测试要做,它会更灵活。


另一个awk使用范围。

awk '/pattern/,0' file

此处end模式永远不会成为现实,因此在找到start模式后不会停止打印。


将范围与sed

一起使用
sed -n '/pattern/,$p' file

pattern和其余行开始打印。我的模式是yo

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

awk -F "yo" 'NF>1 {f=1;print FS$2;next} f' file
you like
I like ice creem

答案 1 :(得分:0)

通过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

I think you want this command

$ 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