grep命令实例,Liunx 中sed、grep、cut、sort、tee、diff 、paste命令
grep命令实例,Liunx 中sed、grep、cut、sort、tee、diff 、paste命令详细介绍
本文目录一览: Linux常用指令---grep(搜索过滤)(转)
Linux常用指令---grep(搜索过滤) (转)
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹?配的行打印出来。grep全称是Global?Regular?Expression?Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
1.命令格式:
grep?[option]?pattern?file
2.命令功能:
用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
3.命令参数:
-a???--text???#不要忽略二进制的数据。???
-A
???--after-context=
???#除了显示符合范本样式的那一列之外,并显示该行之后的内容。???
-b???--byte-offset???#在显示符合样式的那一行之前,标示出该行第一个字符的编号。???
-B
???--before-context=
???#除了显示符合样式的那一行之外,并显示该行之前的内容。???
-c????--count???#计算符合样式的列数。???
-C
????--context=
或-
???#除了显示符合样式的那一行之外,并显示该行之前后的内容。???
-d?
??????--directories=
???#当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。???
-e
??--regexp=
???#指定字符串做为查找文件内容的样式。???
-E??????--extended-regexp???#将样式为延伸的普通表示法来使用。???
-f
??--file=
???#指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。???
-F???--fixed-regexp???#将样式视为固定字符串的列表。???
-G???--basic-regexp???#将样式视为普通的表示法来使用。???
-h???--no-filename???#在显示符合样式的那一行之前,不标示该行所属的文件名称。???
-H???--with-filename???#在显示符合样式的那一行之前,表示该行所属的文件名称。???
-i????--ignore-case???#忽略字符大小写的差别。???
-l????--file-with-matches???#列出文件内容符合指定的样式的文件名称。???
-L???--files-without-match???#列出文件内容不符合指定的样式的文件名称。???
-n???--line-number???#在显示符合样式的那一行之前,标示出该行的列数编号。???
-q???--quiet或--silent???#不显示任何信息。???
-r???--recursive???#此参数的效果和指定“-d?recurse”参数相同。???
-s???--no-messages???#不显示错误信息。???
-v???--revert-match???#显示不包含匹配文本的所有行。???
-V???--version???#显示版本信息。???
-w???--word-regexp???#只显示全字符合的列。???
-x????--line-regexp???#只显示全列符合的列。???
-y???#此参数的效果和指定“-i”参数相同。
4.规则表达式:
grep的规则表达式:
^??#锚定行的开始?如:'^grep'匹配所有以grep开头的行。????
$??#锚定行的结束?如:'grep$'匹配所有以grep结尾的行。????
.??#匹配一个非换行符的字符?如:'gr.p'匹配gr后接一个任意字符,然后是p。????
*??#匹配零个或多个先前字符?如:'*grep'匹配所有一个或多个空格后紧跟grep的行。????
.*???#一起用代表任意字符。???
[]???#匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。????
[^]??#匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。????
\(..\)??#标记匹配字符,如'\(love\)',love被标记为1。????
\
<!--??????#锚定单词的开始,如:'\
\>??????#锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。????
x\{m\}??#重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。????
x\{m,\}??#重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。????
x\{m,n\}??#重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。???
\w????#匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。???
\W????#\w的反置形式,匹配一个或多个非单词字符,如点号句号等。???
\b????#单词锁定符,如:?'\bgrep\b'只匹配grep。??
POSIX字符:
为了在不同国家的字符编码中保持一至,POSIX(The?Portable?Operating?System?Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A-?Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]????#文字数字字符???
[:alpha:]????#文字字符???
[:digit:]????#数字字符???
[:graph:]????#非空字符(非空格、控制字符)???
[:lower:]????#小写字符???
[:cntrl:]????#控制字符???
[:print:]????#非空字符(包括空格)???
[:punct:]????#标点符号???
[:space:]????#所有空白字符(新行,空格,制表符)???
[:upper:]????#大写字符???
[:xdigit:]???#十六进制数字(0-9,a-f,A-F)??
5.使用实例:
实例1:查找指定进程
命令:
ps?-ef|grep?svn
输出:
[root@localhost?~]#?ps?-ef|grep?svn
root?4943???1??????0??Dec05?????00:00:00?svnserve?-d?-r?/opt/svndata/grape/
root?16867?16838??0?19:53?pts/0????00:00:00?grep?svn
[root@localhost?~]#
说明:
第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。
实例2:查找指定进程个数
命令:
ps?-ef|grep?svn?-c
ps?-ef|grep?-c?svn
输出:
[root@localhost?~]#?ps?-ef|grep?svn?-c
2
[root@localhost?~]#?ps?-ef|grep?-c?svn?
2
[root@localhost?~]#
说明:
实例3:从文件中读取关键词进行搜索
命令:
cat?test.txt?|?grep?-f?test2.txt
输出:
[root@localhost?test]#?cat?test.txt?
hnlinux
peida.cnblogs.com
ubuntu
ubuntu?linux
redhat
Redhat
linuxmint
[root@localhost?test]#?cat?test2.txt?
linux
Redhat
[root@localhost?test]#?cat?test.txt?|?grep?-f?test2.txt
hnlinux
ubuntu?linux
Redhat
linuxmint
[root@localhost?test]#
说明:
输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行
实例3:从文件中读取关键词进行搜索?且显示行号
命令:
cat?test.txt?|?grep?-nf?test2.txt
输出:
[root@localhost?test]#?cat?test.txt?
hnlinux
peida.cnblogs.com
ubuntu
ubuntu?linux
redhat
Redhat
linuxmint
[root@localhost?test]#?cat?test2.txt?
linux
Redhat
[root@localhost?test]#?cat?test.txt?|?grep?-nf?test2.txt
1:hnlinux
4:ubuntu?linux
6:Redhat
7:linuxmint
[root@localhost?test]#
说明:
输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号
实例5:从文件中查找关键词
命令:
grep?'linux'?test.txt
输出:
[root@localhost?test]#?grep?'linux'?test.txt?
hnlinux
ubuntu?linux
linuxmint
[root@localhost?test]#?grep?-n?'linux'?test.txt?
1:hnlinux
4:ubuntu?linux
7:linuxmint
[root@localhost?test]#
说明:
实例6:从多个文件中查找关键词
命令:
grep?'linux'?test.txt?test2.txt
输出:
[root@localhost?test]#?grep?-n?'linux'?test.txt?test2.txt?
test.txt:1:hnlinux
test.txt:4:ubuntu?linux
test.txt:7:linuxmint
test2.txt:1:linux
[root@localhost?test]#?grep?'linux'?test.txt?test2.txt?
test.txt:hnlinux
test.txt:ubuntu?linux
test.txt:linuxmint
test2.txt:linux
[root@localhost?test]#
说明:
多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上":"作为标示符
实例7:grep不显示本身进程
命令:
ps?aux|grep?\[s]sh
ps?aux?|?grep?ssh?|?grep?-v?"grep"
输出:
[root@localhost?test]#?ps?aux|grep?ssh
root???2720??0.0??0.0??62656??1212????????Ss???Nov02???0:00?/usr/sbin/sshd
root??16834??0.0??0.0??88088??3288????????Ss???19:53???0:00?sshd:?root@pts/0?
root??16901??0.0??0.0??61180???764?pts/0??S+???20:31???0:00?grep?ssh
[root@localhost?test]#?ps?aux|grep?\[s]sh]
[root@localhost?test]#?ps?aux|grep?\[s]sh
root???2720??0.0??0.0??62656??1212????????Ss???Nov02???0:00?/usr/sbin/sshd
root??16834??0.0??0.0??88088??3288????????Ss???19:53???0:00?sshd:?root@pts/0?
[root@localhost?test]#?ps?aux?|?grep?ssh?|?grep?-v?"grep"
root???2720??0.0??0.0??62656??1212????????Ss???Nov02???0:00?/usr/sbin/sshd
root??16834??0.0??0.0??88088??3288????????Ss???19:53???0:00?sshd:?root@pts/0
说明:
实例8:找出已u开头的行内容
命令:
cat?test.txt?|grep?^u
输出:
[root@localhost?test]#?cat?test.txt?|grep?^u
ubuntu
ubuntu?linux
[root@localhost?test]#
说明:
实例9:输出非u开头的行内容
命令:
cat?test.txt?|grep?^[^u]
输出:
[root@localhost?test]#?cat?test.txt?|grep?^[^u]
hnlinux
peida.cnblogs.com
redhat
Redhat
linuxmint
[root@localhost?test]#
说明:
实例10:输出以hat结尾的行内容
命令:
cat?test.txt?|grep?hat$
输出:
[root@localhost?test]#?cat?test.txt?|grep?hat$
redhat
Redhat
[root@localhost?test]#
说明:
实例11:输出ip地址
命令:
?????ifconfig?eth0|grep?-E?"([0-9]{1,3}\.){3}[0-9]"
输出:
[root@localhost?test]#?ifconfig?eth0|grep?"[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
??????????inet?addr:192.168.120.204??Bcast:192.168.120.255??Mask:255.255.255.0
[root@localhost?test]#?ifconfig?eth0|grep?-E?"([0-9]{1,3}\.){3}[0-9]"
??????????inet?addr:192.168.120.204??Bcast:192.168.120.255??Mask:255.255.255.0
[root@localhost?test]#
说明:
实例12:显示包含ed或者at字符的内容行
命令:
cat?test.txt?|grep?-E?"ed|at"
输出:
[root@localhost?test]#?cat?test.txt?|grep?-E?"peida|com"
peida.cnblogs.com
[root@localhost?test]#?cat?test.txt?|grep?-E?"ed|at"
redhat
Redhat
[root@localhost?test]#
说明:
实例13:显示当前目录下面以.txt?结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行
命令:
grep?'[a-z]\{7\}'?*.txt
输出:
[root@localhost?test]#?grep?'[a-z]\{7\}'?*.txt
test.txt:hnlinux
test.txt:peida.cnblogs.com
test.txt:linuxmint
[root@localhost?test]#
实例14:日志文件过大,不好查看,我们要从中查看自己想要的内容,或者得到同一类数据,比如说没有404日志信息的
命令:
grep?'.'?access1.log|grep?-Ev?'404'?>?access2.log
grep?'.'?access1.log|grep?-Ev?'(404|/photo/|/css/)'?>?access2.log
grep?'.'?access1.log|grep?-E?'404'?>?access2.log
输出:
[root@localhost?test]#?grep?“.”access1.log|grep?-Ev?“404”?>?access2.log
说明:上面3句命令前面两句是在当前目录下对access1.log文件进行查找,找到那些不包含404的行,把它们放到access2.log中,后面去掉’v’,即是把有404的行放入access2.log
规则文件>
规则文件>
范本样式>
范本样式>
动作>
动作>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
显示行数>
Linux下Grep命令的详细使用方法
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:
$ grep magic /usr/src/linux/Documentation/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件‘sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使‘grep’的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读:
$ grep magic /usr/src/linux/Documentation/* | less
这样,您就可以更方便地阅读。
有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按
,然后再试。
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep '\
<man' * 匹配‘manic’和‘man’,但不是‘batman’,
grep '\
' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
'^':指匹配的字符串在行首,
'$':指匹配的字符串在行尾,
如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 🙂 。如果您只是需要更清楚的输出,不妨试试 fungrep 。
linux grep命令
1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。
4.grep命令使用简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
5.grep命令使用复杂实例
假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更方便地阅读。
有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按
,然后再试。
下面还有一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
grep -n pattern files 即可显示行号信息
grep -c pattern files 即可查找总行数
这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\
<man’ * 匹配’manic’和’man’,但不是’batman’,
grep ‘\
’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行 尾,
Grep 命令 用法大全
1、 参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
-n:打印包含匹配项的行和行标
2、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\> 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符
* 所有字符,长度可以为0
3、举例
# ps -ef | grep in.telnetd
root 19955 181 0 13:43:53 ? 0:00 in.telnetd
# more size.txt size文件的内容
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
# more size.txt | grep '[a-b]' 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525
# more size.txt | grep '[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
# more size.txt | grep 'b' 单个字符;如[A] 即A符合要求
b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345
# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon
# grep '^root' /etc/group 匹配正则表达式的开始行
root::0:root
# grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp
# grep '\
<uucp' etc group
uucp::5:root,uucp
# grep 'root$' /etc/group 匹配正则表达式的结束行
root::0:root
mail::6:root
# more size.txt | grep -i 'b1..*3' -i :忽略大小写
b124230
b103303
B103303
# more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配项的行
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345
# more size.txt | grep -in 'b1..*3'
1:b124230
9:b103303
15:B103303
# grep '$' /etc/init.d/nfs.server | wc -l
128
# grep '\$' /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义
15
# grep '\$' /etc/init.d/nfs.server
case "$1" in
>/tmp/sharetab.$$
[ "x$fstype" != xnfs ] &&
echo "$path\t$res\t$fstype\t$opts\t$desc"
>>/tmp/sharetab.$$
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)'
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] &&
if [ $startnfsd -ne 0 ]; then
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"
# more size.txt
the test file
their are files
The end
# grep 'the' size.txt
the test file
their are files
# grep '\
<the' size.txt
the test file
their are files
# grep 'the\>' size.txt
the test file
# grep '\
' size.txt
the test file
# grep '\<[Tt]he\>' size.txt
the test file
==================================================================
1,简介
使用正则表达式的一个多用途文本搜索工具.这个php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">命令本来是ed行编辑器中的一个php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">命令/过滤器:
g/re/p -- global - regular expression - print.
基本格式
grep pattern [file...]
(1)grep 搜索字符串 [filename]
(2)grep 正则表达式 [filename]
在文件中搜索所有 pattern 出现的位置, pattern 既可以是要搜索的字符串,也可以是一个正则表达式.
注意:在输入要搜索的字符串时最好使用双引号/而在模式匹配使用正则表达式时,注意使用单引号
2,grep的选项
-c 只输出匹配行的计数
-i 不区分大小写(用于单字符)
-n 显示匹配的行号
-v 不显示不包含匹配文本的所以有行
-s 不显示错误信息
-E 使用扩展正则表达式
更多的选项请查看:man grep
3,常用grep实例
(1)多个文件查询
grep "sort" *.doc #见文件名的匹配
(2)行匹配:输出匹配行的计数
grep -c "48" data.doc #输出文档中含有48字符的行数
(3)显示匹配行和行数
grep -n "48" data.doc #显示所有匹配48的行和行号
(4)显示非匹配的行
grep -vn "48" data.doc #输出所有不包含48的行
(4)显示非匹配的行
grep -vn "48" data.doc #输出所有不包含48的行
(5)大小写敏感
grep -i "ab" data.doc #输出所有含有ab或Ab的字符串的行
4, 正则表达式的应用
(1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
grep '[239].' data.doc #输出所有含有以2,3或9开头的,并且是两个数字的行
(2)不匹配测试
grep '^[^48]' data.doc #不匹配行首是48的行
(3)使用扩展模式匹配
grep -E '219|216' data.doc
(4) ...
这需要在实践中不断应用和总结,熟练掌握正则表达式。
5, 使用类名
可以使用国际模式匹配的类名:
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab
[[:alpha:]] [a-zA-Z]
(1)使用
grep '5[[:upper:]][[:upper:]]' data.doc #查询以5开头以两个大写字母结尾的行
Linux正则表达式教程:Grep Regex示例
正则表达式是特殊字符,可帮助搜索数据,匹配复杂模式。正则表达式缩写为“regexp”或“regex”。
为了便于理解,让我们逐一学习不同类型的正则表达式。
[TOC]
一些常用的正则表达式命令是tr,sed,vi和grep。下面列出了一些基本的正则表达式。
我们来看一个例子吧。
执行cat示例以查看现有文件的内容
搜索包含字母'a'的内容。
' ^ '匹配字符串的开头。让我们搜索一下STARTS的内容
仅过滤以字符开头的行。将忽略开头不包含字符“a”的行。
让我们看看另一个例子 -
仅选择那些以 $ 结尾的行
这些表达式告诉我们字符串中字符的出现次数。他们是
例:
过滤掉包含字符'p'的所有行
我们想要检查字符'p'是否在字符串中依次出现2次。为此,语法将是:
注意:您需要使用这些正则表达式添加-E。
这些正则表达式包含多个表达式的组合。他们之中有一些是:
例:
搜索所有字符't'
假设我们要过滤字符'a'在字符't'之前的行
我们可以使用命令
大括号扩展的语法是花括号“{}”内的序列或逗号分隔的项目列表。序列中的起始和结束项由两个句点“..”分隔。
一些例子:
在上面的示例中,echo命令使用大括号扩展创建字符串。
【shell笔记)文本处理 专项】Linux数据文本处理工具(3)
sed 命令从文本或者标准输入中每次读入一行数据。
我们先从简单的实例出发,看下该命令怎么将一列中的 chrm12 , chrom2 等转换成 chr12 , chr2 的格式。
虽然示例文件处理仅仅只有三行,但我们可以将这种处理方式运用到上G甚至更大的数据文件中,而不用打开整个文件进行处理。并且,可以借助重导向实现对数据处理结果的输出。
sed 替换命令采用的格式是
sed 会自动搜索符合 pattern 的字符串,然后修改为 replacement (我们想要修改后的样子)。一般默认 sed 只替换第一个匹配的 pattern ,我们可以通过添加全局标识 g 将其应用到数据的所有行中。
如果我们想要忽略匹配的大小写,使用 i 标识
默认 sed 命令支持基本的POSIX正则表达式(BRE),可以通过 -E 选项进行拓展(ERE)。很多的Linux命令都这种方式,像常用的 grep 命令。
再看一个实例,如果我们想把 chr1:28647389-28659480 这样格式的文字转换为三列,可以使用:
我们聚焦在第二个命令 sed 上。初看杂乱无章,但是从最大的结构看依旧是
先看 pattern 部分,这是由几个简单正则表达式组成的复合体,几个 () 括起来的字符串可以单独看。第一个匹配 chr 加上一个非冒号的字符,第二个和第三个都是匹配多个数字。最开始的 ^ 表示以 chr 起始(前面没有字符),各个括号中间的是对应的字符。整体的 pattern 的目的就是为了找到文本中符合这种模式的字符串,如果只是想把这个模式找出来的话,几个括号可以不用加。显然这几个括号的作用就是将它们划分成多个域,帮助 sed 进行处理。可以看到 replacement 部分存在 \1 , \2 , \3 ,它恰好对应 () 的顺序。这样我们在中间插入 \t 制表符,就可以完成我们想要的功能:将原字符串转换为三列。
我本身对字符串并不是非常熟悉,懂一些元字符,可能讲解的不是很到位。不熟悉正则表达式的朋友,可以学习和参考下 学习正则表达式 ,是我从Github上Copy到的非常好的学习资料,有兴趣也可以Fork学习。
上山的路总是有很多条,我们下面看下其他实现该功能的办法:
这三种方式看起来都非常简单有效。它处理字符串的思路不是从匹配pattern然后替换入手,不对,应该说是不是从匹配所有pattern然后替换入手。处理的关键是只处理字符串中看似无用的连字符 : 与 - ,将其替换成制表符从而轻松完成分割。
sed 's/:/\t/' | sed 's/-/\t/' 可以通过 -e 选项写为 sed -e 's/:/\t/' -e 's/-/\t/' ,效果等价。
默认 sed 命令支持基本的POSIX正则表达式(BRE),可以通过 -E 选项进行拓展(ERE)。很多的Linux命令都这种方式,像常用的 grep 命令。
再看一个实例,如果我们想把 chr1:28647389-28659480 这样格式的文字转换为三列,可以使用:
我们聚焦在第二个命令 sed 上。初看杂乱无章,但是从最大的结构看依旧是
先看 pattern 部分,这是由几个简单正则表达式组成的复合体,几个 () 括起来的字符串可以单独看。第一个匹配 chr 加上一个非冒号的字符,第二个和第三个都是匹配多个数字。最开始的 ^ 表示以 chr 起始(前面没有字符),各个括号中间的是对应的字符。整体的 pattern 的目的就是为了找到文本中符合这种模式的字符串,如果只是想把这个模式找出来的话,几个括号可以不用加。显然这几个括号的作用就是将它们划分成多个域,帮助 sed 进行处理。可以看到 replacement 部分存在 \1 , \2 , \3 ,它恰好对应 () 的顺序。这样我们在中间插入 \t 制表符,就可以完成我们想要的功能:将原字符串转换为三列。
我本身对字符串并不是非常熟悉,懂一些元字符,可能讲解的不是很到位。不熟悉正则表达式的朋友,可以学习和参考下 学习正则表达式 ,是我从Github上Copy到的非常好的学习资料,有兴趣也可以Fork学习。
上山的路总是有很多条,我们下面看下其他实现该功能的办法:
这三种方式看起来都非常简单有效。它处理字符串的思路不是从匹配pattern然后替换入手,不对,应该说是不是从匹配所有pattern然后替换入手。处理的关键是只处理字符串中看似无用的连字符 : 与 - ,将其替换成制表符从而轻松完成分割。
sed 's/:/\t/' | sed 's/-/\t/' 可以通过 -e 选项写为 sed -e 's/:/\t/' -e 's/-/\t/' ,效果等价。
默认, sed 会输出每一行的结果,用 replacement 替换 pattern ,但实际中我们可能会因此得到不想要的结果。比如下面的这个例子。
如果我们想要抓出 gtf 文件第九列的转录名,可能会使用以下命令
我们可以发现一些没有转录名行的结果是输出整行,这可不是我们想要的。一种解决办法是在使用 sed 之前先抓出有 transcript_id 的行。其实 sed 命令本身也可以通过选项和参数设定解决这个问题,这里我们可以用 -n 选项关闭 sed 输出所有行,在最末的 / 后加 p 只输出匹配项。
注意方括号内 ^ 是非(取反)的意思。
解释如下:
+ 号的使用是一种非贪婪的方法。很多新手会用 * ,这是贪婪操作,往往会得不偿失,需要注意喔。
使用 * 时它会尽量多地去匹配符合要求的模式。
我们也可以用 sed 命令来获取特定范围的行,比如说我要取出头10行,可以使用
20到50行
当然 sed 的功能特性远远不止这些,有待于大家更多地挖掘。不过需要注意的是,尽量让工具干它最擅长的事情。如果是复杂地大规模计算,还是最好写个Python脚本。
首先需要记住 连续 命令和 管道 命令的区别:前者是简单地一个一个按顺序运行程序(一般用 && 或者 ; );后者前一个程序的输出结果会直接传到下一个命令程序的输入中(这不就是流程化操作么,用 | 分隔)。
子shell可以让我们在一个独立的shell进程中执行连续命令。
首先看个例子
发现仅仅加了个括号,结果就不同了。第二个命令就用了子shell,它把两个 echo 命令放进单独的空间执行后将结果传给下游。
子shell在对 gtf 文件进行操作时有个非常有意思有用的用处。我们如果想对 gtf 文件排序,但是又想要保留文件头部注释信息,我们就能够用两次 grep 操作分别抓出注释和非注释信息,然后又把它结合在一起。下面看看效果,用 less 进行检查:
可以看到,子shell确实能够给我们提供非常有用的操作去组合命令实现想要的功能。
很多生信命令行工具需要提供多个输入和输出参数,这用在管道命令里可能会导致非常低效的情形(管道只接受一个标准输入和输出)。幸好,我们可以使用命令管道来解决此类问题。
命名管道 ,也成为FIFO(先入先出,额,这不是队列么:smile:)。它是一个特殊的排序文件,命名管道有点像文件,它可以永久保留在你的文件系统上(估计本质就是文件吧~)。
我们用 mkfifo 来生成它
可以它看它权限的第一个字符是p,指代是pipe。说明是个特殊文件。
我们像文件一样对它进行一些操作
比如当使用一个生信命令行工具
in1.fq in2.fq 就可以上游输出数据到 processing_tool 的命名管道;同理 out1.fq out2.fq 可以是命名管道用来写进输出数据。
但这样我们每次都得不停地创建和删除这些文件,解决办法是使用匿名管道,也叫进程替换。
不能光说,看看例子就知道和理解了。
echo 命令运行后使用了进程替换,产生匿名文件,然后匿名文件被重导向 cat 命令。
把它用到工具上,就变成了(假定上游zcat下游执行grep命令)
关于Linux数据处理工具内容全部整理发布在我的博客上。 详情点击
Linux批量替换多个文件中字符串
linux批量替换多个文件中字符串linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的字符串。sed
-i
s/原字符串/新字符串/g
`grep
原字符串
-rl
所在目录`例如:我要把mahuinan替换为huinanma,执行命令:sed
-i
s/mahuinan/huinanma/g
'grep
mahuinan
-rl
/www'这是目前linux最简单的批量替换字符串命令了!具体格式如下:sed
-i
s/oldString/newString/g
`grep
oldString
-rl
/path`实例代码:sed
-i
s/大小多少/日月水火/g
`grep
大小多少
-rl
/usr/aa`sed
-i
s/大小多少/日月水火/g
`grep
大小多少
-rl
./`
linux系统怎么查看或关闭服务?
chkconfig是通过更改运行级别来控制系统服务的,这里我们就来为大家整理Linux中chkconfig命令打开或关闭系统服务的使用教程,包括查看系统服务信息以及一些使用例子:
chkconfig提供了一个维护/etc/rc[0~6] d 文件夹的命令行工具,它减轻了系统直接管理这些文件夹中的符号连接的负担。chkconfig主要包括5个原始功能:为系统管理增加新的服务、为系统管理移除服务、列出单签服务的启动信息、改变服务的启动信息和检查特殊服务的启动状态。当单独运行chkconfig命令而不加任何参数时,他将显示服务的使用信息。
必要参数--add 开启指定的服务程序--del 关闭指定的服务程序--list 列出chkconfig所知道的所有服务
选择参数--level
设置服务程序的等级代号,它是一串0~7的数字,如“-level35”代表指定运行等级3和5--help 显示帮助信息--version 显示版本信息用法1
代码如下:
[root@localhost www]# chkconfig --list #查看系统程序列表[root@localhost www]# chkconfig httpd on #将httpd加入开机启动[root@localhost www]# chkconfig httpd off #关闭httpd开机启动
用法2
复制代码
代码如下:
[root@localhost tank]# chkconfig --add nginx #添加nginx启动脚本为chkconfig管理的一个服务[root@localhost tank]# chkconfig --del nginx #删除chkconfig管理的的nginx启动服务
实例:安装cent os 64位 后,默认带了很不多不必要的服务,用以下命令列出:
复制代码
代码如下:
chkconfig --list | grep :on
cups 打印服务 yum-updatesd 常在繁忙的时候占用大量CPU和内存 pcscd 智能卡,比如SD读卡器 hidd 和 bluetooth 蓝牙 cpuspeed 智能调节CPU,笔记本用 firstboot 第一次安装完成后的引导设置 gpm 鼠标复制粘贴复制代码
代码如下:
chkconfig cups offchkconfig yum-updatesd offchkconfig pcscd offchkconfig hidd offchkconfig bluetooth offchkconfig cpuspeed offchkconfig firstboot offchkconfig gpm off
以下的内容来源于网络,未考证功用
复制代码
代码如下:
chkconfig rhnsd offchkconfig anacron offchkconfig arptables_jf offchkconfig autofs offchkconfig openibd offchkconfig messagebus offchkconfig rawdevices offchkconfig canna offchkconfig atd offchkconfig iiim offchkconfig pcmcia offchkconfig haldaemon offchkconfig iptables offchkconfig mdmonitor offchkconfig hpoj off#chkconfig nfslock offchkconfig acpid offchkconfig sendmail offchkconfig cups offchkconfig isdn offchkconfig irqbalance offchkconfig microcode_ctl offchkconfig cups-config-daemon offchkconfig ip6tables off
1、ps aux 或netstat -tlunp ps是进程查看命令
netstat是端口查看命令
在Linux系统中,服务一定是有进程的,所以使用ps命令可以查看服务运行情况。
另外,Linux服务多数是网络服务,所以通过netstat命令也可以查看服务运行状态。
2、service 服务名 status
比如查看httpd的Web服务的运行状态,执行service httpd status,
3、/sbin/service --status-all |grep "服务名"
比如查看httpd的web服务
执行 /sbin/service --status-all |grep "httpd"即可。
4、chkconfig --list
比如查看httpd的web服务
执行 chkconfig --list |grep "httpd"即可。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
代号>
Liunx 中sed、grep、cut、sort、tee、diff 、paste命令
把最近学习的liunx命令做一个总结,方便复习使用。
grep是 行 过滤工具,用于根据关键字进行 行过滤
1、语法:
2、常见选项:
3、常见的案例使用
cut是 列 截取工具,用于列的截取
1、语法
2、常见选项
3、常见的案例使用
关于sed命令的使用,大家可以搜索网上相关文章,这里只列举了部分我工作中常用的用法。
1、常见的案例使用
sort工具用于 排序 ,它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
1、语法和选项
2、常见的案例使用
tee工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
1、常见的案例使用
diff工具用于逐行 比较文件的不同 注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配 1、语法
2、常用选项
paste工具用于 合并文件行
1、常用选项
2、常见的案例使用
tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换。 tr工具是一对一替换 ,是将匹配中的字符替换为另外一个字符。
1、常用选项
2、常见的案例使用
自己现在写文章越来越不用心了,总觉得太忙,要把所有时间用在学习上,多总结多写文章。
linux查找文件属于哪个目录
使用find命令
1.列出文件清单命令:ls
ls命令能够列出当前目录下的所有内容。ls 命令的执行方式为:
# ls [-选项] [文件名或者目录名]
进入到Linux命令行中后,我们至少要知道当前所处的位置有哪些内容,这些信息就可以使用ls命令来获得。
在Linux中,ls命令是最常使用的命令之一,因为在命令行下要随时查看目录内容。如果不加任何选项的话,ls命令仅列出当前目录下的文件和目录名,例如,想要查看/etc目录下的内容,可以使用下列命令:
# ls /etc
如果想要列出当前目录下所有文件,则可以使用下列命令:
# ls -a
2、cat命令
功能:在标准输出上显示文件。
语法:cat [-vTEuAte] 文件
例子: cat example.txt
cat -A exam2.txt
cat file1 file2 > file2
3、more命令
功能:在终端屏幕按屏显示文本文件。
语法: more [-pcdls] 文件
例子: more example.c
more -dc example.c
more -c -10 example.c
4、less命令
less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既
可以向前又可以向后翻阅文件。
5、head命令
功能:显示指定文件的前若干行。缺省设置为显示10行
语法:head [-n] 文件
例子: head example.c
head -3 example.c
6、tail命令
功能:显示指定文件的末尾若干行。缺省设置为显示10行
语法:tail [+ / - num ] [参数] 文件
+num 从第num行以后开始显示。- num 从距文件尾num行处开始显示。
例子: tail example.c
tail -4 example.c
7、grep、fgrep和egrep命令
功能:
这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
语法:
grep [-EFbcihlnvxef] [查找模式] [文件名1,文件名2,……]
egrep [选项] [查找模式] [文件名1,文件名2,……]
fgrep [选项] [查找模式] [文件名1,文件名2,……]
例子: grep "text file" example
grep data *
grep goto *.c
RedhatLinux 操作系统的相关知识
Redhat 的中文名称叫“小红帽”,是前几年比较通行的一个版本,但现在其已经商业化,已经停止开发桌面版本,专攻服务器版本,而其个人桌面版的开发已经由Redhat公司将其完全转交给一个开源网站,让其自行研发,这就是现在比较流行的Fedora Linux Desktop Edition.在前几年Redhat公司还对其有一定的支持,但现在已经完全停止了对Fedora的支持,从而二者之间现在已经基本上没有任何关系,但现在大多数人仍然将Fedora看作是Redhat的一个版本。
现在如果想得到RedhatLinux,一般来说需要去购买RedHat的服务器收费版,但是现在还可以从网上下载,只是下载的版本如果没有进行注册那么Redhat公司不会对其进行技术上的支持。但是对于一般的用户来说,技术上的支持也没有太大用处。
这个发行系列已经商业化,个人免费版已停止开发,可考虑其他优秀Linux发行版;如果已经购买RedHat服务器收费版,则可以向RedHat索取学习材料,或向RedHat提问,请求协助,这些都是RedHat收费版出售给你的服务。
Linux系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以包括可执行的程序和其它非正文内容。 Linux文件系统具有良好的结构,系统提供了很多文件处理程序。这里主要介绍常用的文件处理命令。
file
1.作用
file通过探测文件内容判断文件类型,使用权限是所有用户。
2.格式
file [options] 文件名
3.[options]主要参数
-v:在标准输出后显示版本信息,并且退出。
-z:探测压缩过的文件类型。
-L:允许符合连接。
-f name:从文件namefile中读取要分析的文件名列表。
4.简单说明
使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。
5.应用实例
如果我们看到一个没有后缀的文件grap,可以使用下面命令:
$ file grap
grap: English text
此时系统显示这是一个英文文本文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。
mkdir
1.作用
mkdir命令的作用是建立名称为dirname的子目录,与MS DOS下的md命令类似,它的使用权限是所有用户。
2.格式
mkdir [options] 目录名
3.[options]主要参数
-m, --mode=模式:设定权限
,与chmod类似。
-p, --parents:需要时创建上层目录;如果目录早已存在,则不当作错误。
-v, --verbose:每次创建新目录都显示信息。
--version:显示版本信息后离开。
4.应用实例
在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限),那么可以使用以下命令:
$ mkdir -m 777 tsk
grep
1.作用
grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\\:忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\\<:从匹配正则表达式的行开始。
\\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。
正则表达式是Linux/Unix系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符 “*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作和其它功能。
4.应用实例
查询DNS服务是日常工作之一,这意味着要维护覆盖不同网络的大量IP地址。有时IP地址会超过2000个。如果要查看nnn.nnn网络地址,但是却忘了第二部分中的其余部分,只知到有两个句点,例如nnn nn..。要抽取其中所有nnn.nnn IP地址,使用[0-9 ]\\{3 \\}\\.[0-0\\{3\\}\\。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。
$grep '[0-9 ]\\{3 \\}\\.[0-0\\{3\\}\\' ipfile
补充说明,grep家族还包括fgrep和egrep。fgrep是fix grep,允许查找字符串而不是一个模式;egrep是扩展grep,支持基本及扩展的正则表达式,但不支持\\q模式范围的应用及与之相对应的一些更加规范的模式。
dd
1.作用
dd命令用来复制文件,并根据参数将数据转换和格式化。
2.格式
dd [options]
3.[opitions]主要参数
bs=字节:强迫 ibs=
及obs=
。
cbs=字节:每次转换指定的
。
conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。
count=块数目:只复制指定
的输入数据。
ibs=字节:每次读取指定的
。
if=文件:读取
内容,而非标准输入的数据。
obs=字节:每次写入指定的
。
of=文件:将数据写入
,而不在标准输出显示。
seek=块数目:先略过以obs为单位的指定
的输出数据。
skip=块数目:先略过以ibs为单位的指定
的输入数据。
4.应用实例
dd命令常常用来制作Linux启动盘。先找一个可引导内核,令它的根设备指向正确的根分区,然后使用dd命令将其写入软盘:
$ rdev vmlinuz /dev/hda
$dd if=vmlinuz of=/dev/fd0
上面代码说明,使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda,请把“hda”换成自己的根分区,接下来用dd命令将该内核写入软盘。
find
1.作用
find命令的作用是在目录中搜索文件,它的使用权限是所有用户。
2.格式
find [path][option*][**pression]
path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。
3.主要参数
[options]参数:
-depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。
-maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找。
-mindepth levels:表示至少查找到开始目录的第level层子目录。
-mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找。
-version:打印版本。
[expression]是匹配表达式,是find命令接受的表达式,find命令的所有操作都是针对表达式的。它的参数非常多,这里只介绍一些常用的参数。
—name:支持统配符*和?。
-atime n:搜索在过去n天读取过的文件。
-ctime n:搜索在过去n天修改过的文件。
-group grpoupname:搜索所有组为grpoupname的文件。
-user 用户名:搜索所有文件属主为用户名(ID或名称)的文件。
-size n:搜索文件大小是n个block的文件。
-print:输出搜索结果,并且打印。
4.应用技巧
find命令查找文件的几种方法:
(1)根据文件名查找
例如,我们想要查找一个文件名是lilo.conf的文件,可以使用如下命令:
find / -name lilo.conf
find命令后的“/”表示搜索整个硬盘。
(2)快速查找文件
根据文件名查找文件会遇到一个实际问题,就是要花费相当长的一段时间,特别是大型Linux文件系统和大容量硬盘文件放在很深的子目录中时。如果我们知道了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时间。比如smb.conf文件,从它的文件后缀“.conf”可以判断这是一个配置文件,那么它应该在/etc目录内,此时可以使用下面命令:
find /etc -name smb.conf
这样,使用“快速查找文件”方式可以缩短时间。
(3)根据部分文件名查找方法
有时我们知道只某个文件包含有abvd这4个字,那么要查找系统中所有包含有这4个字符的文件可以输入下面命令:
find / -name '*abvd*'
输入这个命令以后,Linux系统会将在/目录中查找所有的包含有abvd这4个字符的文件(其中*是通配符),比如abvdrmyz等符合条件的文件都能显示出来。
(4) 使用混合查找方式查找文件
find命令可以使用混合查找的方法,例如,我们想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式。
find /etc -size +500000c -and -mtime +1
mv
1.作用
mv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合。
2.格式
mv[options] 源文件或目录 目标文件或目录
3.[options]主要参数
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件。
-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。
4.应用实例
(1)将/usr/cbu中的所有文件移到当前目录(用“.”表示)中:
$ mv /usr/cbu/ * .
(2)将文件cjh.txt重命名为wjz.txt:
$ mv cjh.txt wjz.txt
ls
1.作用
ls命令用于显示目录内容,类似DOS下的dir命令,它的使用权限是所有用户。
2.格式
ls [options][filename]
3.options主要参数
-a, --all:不隐藏任何以“.” 字符开始的项目。
-A, --almost-all:列出除了“ . ”及 “.. ”以外的任何项目。
--author:印出每个文件著作者。
-b, --escape:以八进制溢出序列表示不可打印的字符。
--block-size=大小:块以指定
的字节为单位。
-B, --ignore-backups:不列出任何以 ~ 字符结束的项目。
-f:不进行排序,-aU参数生效,-lst参数失效。
-F, --classify:加上文件类型的指示符号 (*/=@| 其中一个)。
-g:like -l, but do not list owner。
-G, --no-group:inhibit display of group information。
-i, --inode:列出每个文件的inode号。
-I, --ignore=样式:不印出任何符合Shell万用字符
的项目。
-k:即--block-size=1K。
-l:使用较长格式列出信息。
-L, --dereference:当显示符号链接的文件信息时,显示符号链接所指示的对象,而并非符号链接本身的信息。
-m:所有项目以逗号分隔,并填满整行行宽。
-n, --numeric-uid-gid:类似-l,但列出UID及GID号。
-N, --literal:列出未经处理的项目名称,例如不特别处理控制字符。
-p, --file-type:加上文件类型的指示符号 (/=@| 其中一个)。
-Q, --quote-name:将项目名称括上双引号。
-r, --reverse:依相反次序排列。
-R, --recursive:同时列出所有子目录层。
-s, --size:以块大小为序。
4.应用举例
ls命令是Linux系统使用频率最多的命令,它的参数也是Linux命令中最多的。使用ls命令时会有几种不同的颜色,其中蓝色表示是目录,绿色表示是可执行文件,红色表示是压缩文件,浅蓝色表示是链接文件,加粗的黑色表示符号链接,灰色表示是其它格式文件。ls最常使用的是ls- l,见图1所示。
图1 使用ls-l命令
文件类型开头是由10个字符构成的字符串。其中第一个字符表示文件类型,它可以是下述类型之一:-(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)。后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读(r)、写(w)和执行权限(x)。对于目录,表示进入权限。s表示当文件被执行时,把该文件的 UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。t表示设置标志位(留在内存,不被换出)。如果该文件是目录,那么在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,那么在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。接着显示的是文件大小、生成时间、文件或命令名称。
diff
1.作用
diff命令用于两个文件之间的比较,并指出两者的不同,它的使用权限是所有用户。
2.格式
diff [options] 源文件 目标文件
3.[options]主要参数
-a:将所有文件当作文本文件来处理。
-b:忽略空格造成的不同。
-B:忽略空行造成的不同。
-c:使用纲要输出格式。
-H:利用试探法加速对大文件的搜索。
-I:忽略大小写的变化。
-n --rcs:输出RCS格式。
cmp
1.作用
cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户。
2.格式
cmp[options] 文件名
3.[options]主要参数
-l: 将字节以十进制的方式输出,并方便将两个文件中不同的以八进制的方式输出。
cat
1.作用
cat(“concatenate”的缩写)命令用于连接并显示指定的一个和多个文件的有关信息,它的使用权限是所有用户。
2.格式
cat [options] 文件1 文件2……
3.[options]主要参数
-n:由第一行开始对所有输出的行数编号。
-b:和-n相似,只不过对于空白行不编号。
-s:当遇到有连续两行以上的空白行时,就代换为一行的空白行。
4.应用举例
(1)cat命令一个最简单的用处是显示文本文件的内容。例如,我们想在命令行看一下README文件的内容,可以使用命令:
$ cat README
(2)有时需要将几个文件处理成一个文件,并将这种处理的结果保存到一个单独的输出文件。cat命令在其输入上接受一个或多个文件,并将它们作为一个单独的文件打印到它的输出。例如,把README和INSTALL的文件内容加上行号(空白行不加)之后,将内容附加到一个新文本文件File1 中:
$ cat README INSTALL File1
(3)cat还有一个重要的功能就是可以对行进行编号,见图2所示。这种功能对于程序文档的编制,以及法律和科学文档的编制很方便,打印在左边的行号使得参考文档的某一部分变得容易,这些在编程、科学研究、业务报告甚至是立法工作中都是非常重要的。
图2 使用cat命令/etc/named.conf文件进行编号
对行进行编号功能有-b(只能对非空白行进行编号)和-n(可以对所有行进行编号)两个参数:
$ cat -b /etc/named.conf
ln
1.作用
ln命令用来在文件之间创建链接,它的使用权限是所有用户。
2.格式
ln [options] 源文件 [链接名]
3.参数
-f:链结时先将源文件删除。
-d:允许系统管理者硬链结自己的目录。
-s:进行软链结(Symbolic Link)。
-b:将在链结时会被覆盖或删除的文件进行备份。
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。
与硬连接相对应,Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link),也叫软连接。软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
动手联系
上面我们介绍了Linux文件处理命令,下面介绍几个实例,大家可以动手练习一下刚才讲过的命令。
1.利用符号链接快速访问关键目录
符号链接是一个非常实用的功能。假设有一些目录或文件需要频繁使用,但由于Linux的文件和目录结构等原因,这个文件或目录在很深的子目录中。比如, Apache Web服务器文档位于系统的/usr/local/httpd/htdocs中,并且不想每次都要从主目录进入这样一个长的路径之中(实际上,这个路径也非常不容易记忆)。
为了解决这个问题,可以在主目录中创建一个符号链接,这样在需要进入该目录时,只需进入这个链接即可。
为了能方便地进入Web服务器(/usr/local/httpd/htdocs)文档所在的目录,在主目录下可以使用以下命令:
$ ln -s /usr/local/httpd/htdocs gg
这样每次进入gg目录就可访问Web服务器的文档,以后如果不再访问Web服务器的文档时,删除gg即可,而真正的Web服务器的文档并没有删除。
2.使用dd命令将init.rd格式的root.ram内容导入内存
dd if=/dev/fd0 of=floppy.fd
dd if=root.ram of=/dev/ram0 #
3.grep命令系统调用
grep是Linux/Unix中使用最广泛的命令之一,许多Linux系统内部都可以调用它。
(1)如果要查询目录列表中的目录,方法如下:
$ ls -l | grep '∧d'
(2)如果在一个目录中查询不包含目录的所有文件,方法如下:
$ ls -l | grep '∧[∧d]'
(3)用find命令调用grep,如所有C源代码中的“Chinput”,方法如下:
$find /ZhXwin -name *.c -exec grep -q -s Chinput {} \\;-print
样式>
大小>
块数目>
块数目>
文件>
字节>
文件>
字节>
块数目>
字节>
字节>
字节>
模式>