Linux如何通过命令查看⽇志⽂件的某⼏⾏(中间⼏⾏或最后
⼏⾏)
linux 如何显⽰⼀个⽂件的某⼏⾏(中间⼏⾏)
【⼀】从第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⾏
【三】⽤sed命令
sed -n '5,10p' filename 这样你就可以只查看⽂件的第5⾏到第10⾏。
Linux统计⽂件⾏数
语法:wc [选项] ⽂件…
说明:该命令统计给定⽂件中的字节数、字数、⾏数。如果没有给出⽂件名,则从标准输⼊读取。wc同时也给出所有指定⽂件的总统计数。字是由空格字符区分开的最⼤字符串。
该命令各选项含义如下:
  - c 统计字节数。
  - l 统计⾏数。
  - w 统计字数。
这些选项可以组合使⽤。
输出列的顺序和数⽬不受选项的顺序和数⽬的影响。
总是按下述顺序显⽰并且每项最多⼀列。
⾏数、字数、字节数、⽂件名
如果命令⾏中没有⽂件名,则输出中不出现⽂件名。
例如:
$ wc - lcw file1 file2
4 33 file1
7 52 file2
11 11 85 total
举例分析:
1.统计demo⽬录下,js⽂件数量:
find demo/ -name "*.js" |wc -l
2.统计demo⽬录下所有js⽂件代码⾏数:
find demo/ -name "*.js" |xargs cat|wc -l 或 wc -l `find ./ -name "*.js"`|tail -n1
3.统计demo⽬录下所有js⽂件代码⾏数,过滤了空⾏:
find /demo -name "*.js" |xargs cat|grep -v ^$|wc -l
1.简介
sed是⾮交互式的编辑器。它不会修改⽂件,除⾮使⽤shell重定向来保存结果。默认情况下,所有的输出⾏都被打印到屏幕上。
sed编辑器逐⾏处理⽂件(或输⼊),并将结果发送到屏幕。具体过程如下:⾸先sed把当前正在处理的⾏保存在⼀个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的⾏,完成后把该⾏发送到屏幕上。sed每处理完⼀⾏就将其从临时缓冲区删除,然后将下⼀⾏读⼊,进⾏处理和显⽰。处理完输⼊⽂件的最后⼀⾏后,sed便结束运⾏。sed把每⼀⾏都存在临时缓冲区中,对这个副本进⾏编辑,所以不会修改原⽂件。
2.定址
定址⽤于决定对哪些⾏进⾏编辑。地址的形式可以是数字、正则表达式、或⼆者的结合。如果没有指定地址,sed将处理输⼊⽂件的所有⾏。
地址是⼀个数字,则表⽰⾏号;是“$"符号,则表⽰最后⼀⾏。例如:
sed -n '3p' datafile
只打印第三⾏
只显⽰指定⾏范围的⽂件内容,例如:
linux查看当前文件夹内容# 只查看⽂件的第100⾏到第200⾏
sed -n '100,200p' mysql_slow_query.log
地址是逗号分隔的,那么需要处理的地址是这两⾏之间的范围(包括这两⾏在内)。范围可以⽤数字、正则表达式、或⼆者的组合表⽰。例如:
sed '2,5d' datafile
#删除第⼆到第五⾏
sed '/My/,/You/d' datafile
#删除包含"My"的⾏到包含"You"的⾏之间的⾏
sed '/My/,10d' datafile
#删除包含"My"的⾏到第⼗⾏的内容
3.命令与选项
sed命令告诉sed如何处理由地址指定的各输⼊⾏,如果没有指定地址则处理所有的输⼊⾏。
3.1 sed命令
命令  功能
a\
在当前⾏后添加⼀⾏或多⾏。多⾏时除最后⼀⾏外,每⾏末尾需⽤“\”续⾏
c\  ⽤此符号后的新⽂本替换当前⾏中的⽂本。多⾏时除最后⼀⾏外,每⾏末尾需⽤"\"续⾏
i\  在当前⾏之前插⼊⽂本。多⾏时除最后⼀⾏外,每⾏末尾需⽤"\"续⾏
d  删除⾏
h  把模式空间⾥的内容复制到暂存缓冲区
H  把模式空间⾥的内容追加到暂存缓冲区
g  把暂存缓冲区⾥的内容复制到模式空间,覆盖原有的内容
G  把暂存缓冲区的内容追加到模式空间⾥,追加在原有内容的后⾯
l  列出⾮打印字符
p  打印⾏
n  读⼊下⼀输⼊⾏,并从下⼀条命令⽽不是第⼀条命令开始对其的处理
q  结束或退出sed
r  从⽂件中读取输⼊⾏
!  对所选⾏以外的所有⾏应⽤命令
s  ⽤⼀个字符串替换另⼀个
g  在⾏内进⾏全局替换
w  将所选的⾏写⼊⽂件
x  交换暂存缓冲区与模式空间的内容
y  将字符替换为另⼀字符(不能对正则表达式使⽤y命令)
3.2 sed选项
选项  功能
-e  进⾏多项编辑,即对输⼊⾏应⽤多条sed命令时使⽤
-n  取消默认的输出
-
f  指定sed脚本的⽂件名
4.退出状态
sed不向grep⼀样,不管是否到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。
5.正则表达式元字符
与grep⼀样,sed也⽀持特殊元字符,来进⾏模式查、替换。不同的是,sed使⽤的正则表达式是括在斜杠线"/"之间的模式。
如果要把正则表达式分隔符"/"改为另⼀个字符,⽐如o,只要在这个字符前加⼀个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:sed -n '\o^Myop' datafile
元字符  功能  ⽰例
^  ⾏⾸定位符  /^my/  匹配所有以my开头的⾏
$  ⾏尾定位符  /my$/  匹配所有以my结尾的⾏
.
  匹配除换⾏符以外的单个字符  /m..y/  匹配包含字母m,后跟两个任意字符,再跟字母y的⾏
*  匹配零个或多个前导字符  /my*/  匹配包含字母m,后跟零个或多个y字母的⾏
[]  匹配指定字符组内的任⼀字符  /[Mm]y/  匹配包含My或my的⾏
[^]  匹配不在指定字符组内的任⼀字符  /[^Mm]y/  匹配包含y,但y之前的那个字符不是M或m的⾏
\(..\)  保存已匹配的字符  1,20s/\(you\)self/\1r/  标记元字符之间的模式,并将其保存为标签1,之后可以使⽤\1来引⽤它。最多可以定义9个标签,从左边开始编号,最左边的是第⼀个。此例中,对第1到第20⾏进⾏处理,you被保存为标签1,如果发现youself,则替换为your。
&  保存查串以便在替换串中引⽤  s/my/**&**/  符号&代表查串。my将被替换为**my**
\<  词⾸定位符  /\<my/  匹配包含以my开头的单词的⾏
\>  词尾定位符  /my\>/  匹配包含以my结尾的单词的⾏
x\{m\}  连续m个x  /9\{5\}/ 匹配包含连续5个9的⾏
x\{m,\}  ⾄少m个x  /9\{5,\}/  匹配包含⾄少连续5个9的⾏
x\{m,n\}  ⾄少m个,但不超过n个x  /9\{5,7\}/  匹配包含连续5到7个9的⾏
6.范例
6.1 p命令
命令p⽤于显⽰模式空间的内容。默认情况下,sed把输⼊⾏打印在屏幕上,选项-n⽤于取消默认的打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容。
sed '/my/p' datafile
#默认情况下,sed把所有输⼊⾏都打印在标准输出上。如果某⾏匹配模式my,p命令将把该⾏另外打印⼀遍。
sed -n '/my/p' datafile
#选项-n取消sed默认的打印,p命令把匹配模式my的⾏打印⼀遍。
6.2 d命令
命令d⽤于删除输⼊⾏。sed先将输⼊⾏从⽂件复制到模式空间⾥,然后对该⾏执⾏sed命令,最后将
模式空间⾥的内容显⽰在屏幕上。如果发出的是命令d,当前模式空间⾥的输⼊⾏会被删除,不被显⽰。
sed '$d' datafile
#删除最后⼀⾏,其余的都被显⽰
sed '/my/d' datafile
#删除包含my的⾏,其余的都被显⽰
6.3 s命令
sed 's/^My/You/g' datafile
#命令末端的g表⽰在⾏内进⾏全局替换,也就是说如果某⾏出现多个My,所有的My都被替换为You。
sed -n '1,20s/My$/You/gp' datafile
#取消默认输出,处理1到20⾏⾥匹配以My结尾的⾏,把⾏内所有的My替换为You,并打印到屏幕上。
sed 's#My#Your#g' datafile
#紧跟在s命令后的字符就是查串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。⽆论什么字符(换⾏符、反斜线除外),只要紧跟s命令,就成了新的串分隔符。
6.4 e选项
-e是编辑命令,⽤于sed执⾏多个编辑任务的情况下。在下⼀⾏开始编辑前,所有的编辑动作将应⽤到模式缓冲区中的⾏上。
sed -e '1,10d' -e 's/My/Your/g' datafile
#选项-e⽤于进⾏多重编辑。第⼀重编辑删除第1-3⾏。第⼆重编辑将出现的所有My替换为Your。因为是逐⾏进⾏这两项编辑(即这两个命令都在模式空间的当前⾏上执⾏),所以编辑命令的顺序会影响结果。
6.5 r命令
r命令是读命令。sed使⽤该命令将⼀个⽂本⽂件中的内容加到当前⽂件的特定位置上。
sed '/My/' datafile
#如果在⽂件datafile的某⼀⾏匹配到模式My,就在该⾏后读⼊⽂件的内容。如果出现My的⾏不⽌⼀⾏,则在出现My的各⾏后都读⼊⽂件的内容。
6.6 w命令
sed -n '/hrwang/' datafile
6.7 a\ 命令
a\ 命令是追加命令,追加将添加新⽂本到⽂件中当前⾏(即读⼊模式缓冲区中的⾏)的后⾯。所追加的⽂本⾏位于sed命令的下⽅另起⼀⾏。如果要追加的内容超过⼀⾏,则每⼀⾏都必须以反斜线结束,最后⼀⾏除外。最后⼀⾏将以引号和⽂件名结束。
sed '/^hrwang/a\
>hrwang and mjfan are husband\
>and wife' datafile
#如果在datafile⽂件中发现匹配以hrwang开头的⾏,则在该⾏下⾯追加hrwang and mjfan are husband and wife
6.8 i\ 命令
i\ 命令是在当前⾏的前⾯插⼊新的⽂本。
6.9 c\ 命令
sed使⽤该命令将已有⽂本修改成新的⽂本。
6.10 n命令
sed使⽤该命令获取输⼊⽂件的下⼀⾏,并将其读⼊到模式缓冲区中,任何sed命令都将应⽤到匹配⾏紧接着的下⼀⾏上。
sed '/hrwang/{n;s/My/Your/;}' datafile
注:如果需要使⽤多条命令,或者需要在某个地址范围内嵌套地址,就必须⽤花括号将命令括起来,每⾏只写⼀条命令,或这⽤分号分割同⼀⾏中的多条命令。
6.11 y命令
该命令与UNIX/Linux中的tr命令类似,字符按照⼀对⼀的⽅式从左到右进⾏转换。例如,y/abc/ABC/将
把所有⼩写的a转换成A,⼩写的b转换成B,⼩写的c转换成C。
sed '1,20y/hrwang12/HRWANG^$/' datafile
#将1到20⾏内,所有的⼩写hrwang转换成⼤写,将1转换成^,将2转换成$。
#正则表达式元字符对y命令不起作⽤。与s命令的分隔符⼀样,斜线可以被替换成其它的字符。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。