LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1389|回复: 7

求一Shell

[复制链接]
发表于 2003-7-1 15:32:46 | 显示全部楼层 |阅读模式
能够将文本文件中以特定字符串搜索到的行和它的下一行显示出来。
发表于 2003-7-1 16:04:10 | 显示全部楼层
不知道是不是这个意思?
文本名:text
abc,kklkl
sjl;djkl;slafd
jweriowoeriwer
ABC
sdjklfsl;dfjl;sjfdasfa
jweroweru
ERER
dljasl;df;asdf
wierowoperuowrweur
weruewoiruopwere
djlasjkld;fjl;skaf,sdfaskldjfowier,werwejorweirererreer
we.
ABC
asjldfjljasldjflkajl;sfjdljalsdfjl;kajsdfl;j
ABC
0054305u3u45034

把ABC以及他的下一行显示出来
  1. #!/bin/ksh
  2. #
  3. n=$(grep -n ABC text|awk -F: '{print $1}')        #记录特定字符所在的行号,放在变量n中以便在for中进行历遍
  4. for i in $n
  5. do
  6. ((m=$i+1))        #计算下一个行号
  7. sed -ne "${i}p" -ne "${m}p" text
  8. done
复制代码
运行结果:
ABC
sdjklfsl;dfjl;sjfdasfa
ABC
asjldfjljasldjflkajl;sfjdljalsdfjl;kajsdfl;j
ABC
0054305u3u45034

我的是有些笨重,我想肯定有更简炼的方法!
发表于 2003-7-1 16:20:48 | 显示全部楼层
#!/bin/bash

sed -n '
/ABC/ {
N
p
}' rawdata.8

prog $ ./sedmulti.sh
ABC
sdjklfsl;dfjl;sjfdasfa
ABC
asjldfjljasldjflkajl;sfjdljalsdfjl;kajsdfl;j
ABC
0054305u3u45034
发表于 2003-7-1 16:27:39 | 显示全部楼层
penny兄的sed运用的真棒!;)(还得翻翻书去!)
发表于 2003-7-1 16:31:19 | 显示全部楼层
其实grep就可以,只是输出不太合要求,刚才没贴

$grep -A1 ABC rawdata.8
ABC
sdjklfsl;dfjl;sjfdasfa
--
ABC
asjldfjljasldjflkajl;sfjdljalsdfjl;kajsdfl;j
ABC
0054305u3u45034

出现---是因为

-A NUM, --after-context=NUM
   Print NUM  lines  of  trailing  context  after  matching lines.
   Places  a  line  containing  --  between  contiguous  groups  of  matches.

另外sed的N模式有个小bug,比如

adsfwer
ABC
ABC
asjldfjljasldjflkajl;sfjdljalsdfjl;kajsdfl;j

这时候输出的就只有
ABC
ABC
会漏掉
ABC
asjldfjljasldjflkajl;sfjdljalsdfjl;kajsdfl;j
原因显而易见

发表于 2003-7-1 23:22:24 | 显示全部楼层
呵呵,这也许不是bug,而是就是这么设计的吧 :)
发表于 2003-7-2 00:50:59 | 显示全部楼层

怎么按一个键就中制一个程序

如按 n
发表于 2003-7-2 01:16:27 | 显示全部楼层
for example:
  1. #!/bin/ksh
  2. #
  3. trap ' ' 2
  4. while
  5. do
  6. echo "press n key break processing..."
  7. read
  8. if [[ $REPLY = n ]]
  9. then
  10. break
  11. fi
  12. done
复制代码
关于trap信号列表见:
http://www.linuxsir.cn/bbs/showthread.php?threadid=37929
trap使用方法,见置顶入门的铁子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表