linux 如何显示一个文件的某几行(中间几行)
转:http://www.cnblogs.com/xianghang123/archive/2011/08/03/2125977.html
http://www.chinabin.cn/language/shell/2150.html
【一】从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000
【二】显示1000行到3000行
cat filename| head -n 3000 | tail -n +1000
*注意两种方法的顺序
分解:
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行
tail和 head 用法比较简单;
tail -n 行数值 文件名;
【三】用sed命令
sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。 这里的sed表示string edit流编辑器,p表示print打印。
sed是一种在线编辑器,它一次处理一行内容。sed全称是stream edit,流处理器。这个概念是相对于vi等交互式文本处理器而言的。基本上使用它进行每一行的处理。在使用sed的过程中,我们使用最多的,或者说sed提供最多的是三个功能。字符串匹配替换、删除行、打印命令和插入文本等命令的组合。下面是总结的比较常用、简单的用法。
删除d:
地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。例如:
|
替换每一行的第一个出现的abc为def
1
|
sed-e's/abc/def/'file.name
|
替换所有的abc为def
1
|
sed-e's/abc/def/g'file.name
|
shell脚本中的用法,注意是双引号而不是单引号
1
|
sed-e"s/$old_pattern/$new_pattern/g"file.name
|
删除当前目录中文件名中包含特殊字符的文件,如 +,{,;,\等
1
2
3
4
|
forfilename in*
do
badname=!echo"$filename"|sed-n/[\+\{\;\"\\\=\?\~\(\)\<\>\&\*\|\$\]/p!
done
|
当然,也可以使用find语句,如下:
1
|
find.-name'*[+{;"\\=?~()<>&*|$ ]*'-exec rm-f'{}'\;
|
文件改名