Linux下Grep命令的详细使用方法

Linux下Grep命令的详细使用方法,第1张

在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。

假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:

$ grep magic /usr/src/linux/Documentation/

sysrqtxt: How do I enable the magic SysRQ key

sysrqtxt: How do I use the magic SysRQ key

其中文件‘sysrptxt’包含该字符串,讨论的是 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 '\grep '\' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。

'^':指匹配的字符串在行首,

'$':指匹配的字符串在行尾,

如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。

[1] 每两行合并在一起

<@dahu>awk 'ORS=NR%2" ":"\n"{print}'

[2] 每三行合并在一起

<@dahu>awk 'ORS=NR%3" ":"\n"{print}'

[3] 每四行合并在一起

<@dahu>awk 'ORS=NR%4" ":"\n"{print}'

[4] 统计std cell和sRam占的面积

<@dahu>summaryReport

[5] 找出drc的port相关的数量

<@dahu>cat postroute_optdrc | grep -B1 Type: | grep -v Type: | grep "\[" |-

[6] 获得选中的pin的名字

<@innovus>dbget selectedname

[7]  对一个文件,多目标删除

<@dahu>sed -i 's/MODE1\|MODE2\|MODE3\|MODE4\|MODE5//g'

[8] 获得不规则fplan的坐标组

<@innovus>dbget topfplanboxes

[9] 在某个目录下找到带某个字符的文件[区分大小写]

<@dahu>find -iname "tcic"

[10] 在某个目录下,遍历所有文件内容,得到含有某个字符/字符串的行

<@dahu>grep -r 'insertion delay' /

[11] 查看当前的INNOVUS版本号

<@dahu>echo $INVS_VER

[12] 替换某个目录下所有文件内容

<@dahu>sed -i"s/查找的内容/替换后的内容/g"`grep -rl"查找的内容"/`

[13] 在gui界面下highlight某条path

<@dahu> ctd_trace -from  -to  -color

[14] 引用${REV},为什么采用大括号{}

为了防止引用造成后面错乱。

如:/fs/omp_com_03/RELEASE/top2hlb/R1/HLB_DEF/${REV}/${top}defgz

[15] 解压命令

gzip -d FileNamegz

[16] 换某个cell的坐标 {AAA, BBB}

<@innovus> dbset [dbget topinstname XXXXXXXX]pt_x AAA

<@innovus> dbset [dbget topinstname XXXXXXXX]pt_y BBB

<@innovus> zoomSelected

[17] 设置某一个cell不用

<@innovus> set_dont_touch BUFF false

<@innovus> set_dont_touch BUFF true

[18] 找某个性质

<@innovus> dbSet []h

[19] 删去空白行

vim 中:g/^s$/d

简单解释一下:

g :全区命令

/ :分隔符

^s$ :匹配空行,其中^表示行首,s表示空字符,包括空格和制表符,重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。

/d :删除该行

[20] echo 写入带有双引号""的内容。

echo ‘ “AAAbbb” ’ >> 1tcl

[21] echo 写入带有单引号‘’的内容。

echo “ ‘AAAbbb' ” >>1tcl

[22] keep CPU 数目

<@innovus>setMultiCpuUsage -localCpu 16

<@innovus>history keep 999999

[23] 打开xlsm文件

openofficeorg 文件

[24] 显示clock path路径

<@innovus> report_timing -to XXX -path_type full_clock

[25]报出没有被约束到的path

<@innovus> report_timing -to XXX -uncounstrained

[26]报出穿过path中的某一点

<@innovus> report_timing -to XXX -view

view = MODE + corner

[27] vim 全选(高亮显示 ):按esc后,然后ggvG或者ggVG

[28]

windows创建的文件是 \n\r结束的, 而linux,mac这种unix类系统是\n结束的。

所以unix的文本到windows会出现换行丢失(ultraedit这种软件可以正确识别); 而反过来就会出现^M的符号了

补充:

windows里用ultraedit,选16进制模式(hex mode)可以看到。linux里面,我就不熟悉了。

linux命令格式:

说明:command: 命令名,相应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也可以省略,[]代表可选 parameter1 …:传给命令的参数:可以是零个一个或多个

一般是linux命令自带的帮助信息

如:

man是linux提供的一个手册,包含了绝大部分的命令、函数使用说明

该手册分成很多章节(section),使用man时可以指定不同的章节来浏览。

例:man ls ; man 2 printf

man中各个section意义如下:

man是按照手册的章节号的顺序进行搜索的。

man设置了如下的功能键:

在敲出命令的前几个字母的同时,按下tab键,系统会自动帮我们补全命令

当系统执行过一些命令后,可按上下键翻看以前的命令,history将执行过的命令列举出来

ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。

Linux文件或者目录名称最长可以有265个字符,“”代表当前目录,“”代表上一级目录,以“”开头的文件为隐藏文件,需要用 -a 参数才能显示。

ls常用参数:

Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。

如:ls > testtxt ( testtxt 如果不存在,则创建,存在则覆盖其内容 )

注意: >输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。

查看内容时,在信息过长无法在一屏上显示时,会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用more命令,每次只显示一页,按下空格键可以显示下一页,按下q键退出显示,按下h键可以获取帮助。

管道:一个命令的输出可以通过管道做为另一个命令的输入。

管道我们可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读)。

clear作用为清除终端上的显示(类似于DOS的cls清屏功能),也可使用快捷键:Ctrl + l ( “l” 为字母 )。

在使用Unix/Linux的时候,经常需要更换工作目录。cd命令可以帮助用户切换工作目录。Linux所有的目录和文件名大小写敏感

cd后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。

使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后面不带参数。

通过mkdir命令可以创建一个新的目录。参数-p可递归创建目录。

需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。

可使用rmdir命令删除一个目录。必须离开目录,并且目录必须为空目录,不然提示删除失败。

可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。

常用参数及含义如下表所示:

Linux链接文件类似于Windows下的快捷方式。

链接文件分为软链接和硬链接。

软链接:软链接不占用磁盘空间,源文件删除则软链接失效。

硬链接:硬链接只能链接普通文件,不能链接目录。

使用格式:

如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。

注意:如果软链接文件和源文件不在同一个目录,源文件要使用绝对路径,不能使用相对路径。

Linux系统中grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。

grep一般格式为:

在grep命令中输入字符串参数时,最好引号或双引号括起来。例如:grep‘a ’1txt。

常用选项说明:

find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。

常用用法:

cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令。

常用选项说明:

用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。

常用选项说明:

计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。

tar使用格式 tar [参数] 打包文件名 文件

tar命令很特殊,其参数前面可以使用“-”,也可以不使用。

常用参数:

tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxxtargz。

gzip使用格式如下:

gzip [选项] 被压缩文件

常用选项:

tar与bzip2命令结合使用实现文件打包、压缩(用法和gzip一样)。

tar只负责打包文件,但不压缩,用bzip2压缩tar打包后的文件,其扩展名一般用xxxxtargz2。

在tar命令中增加一个选项(-j)可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程。

压缩用法:tar -jcvf 压缩包包名 文件(tar jcvf bktarbz2 c)

解压用法:tar -jxvf 压缩包包名 (tar jxvf bktarbz2)

通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。

压缩文件:zip [-r] 目标文件(没有扩展名) 源文件

解压文件:unzip -d 解压后目录文件 压缩文件

whoami该命令用户查看当前系统当前账号的用户名。可通过cat /etc/passwd查看系统用户信息。

由于系统管理员通常需要使用多种身份登录系统,例如通常使用普通用户登录系统,然后再以su命令切换到root身份对传统进行管理。这时候就可以使用whoami来查看当前用户的身份。

who命令用于查看当前所有登录系统的用户信息。

常用选项:

如果是图形界面,退出当前终端;

如果是使用ssh远程登录,退出登陆账户;

如果是切换后的登陆用户,退出则返回上一个登陆账号。

在Unix/Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。

useradd命令的使用格式如下:

useradd [参数] 新建用户账号

在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名。

可以通过su命令切换用户,su后面可以加“-”。su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录:

注意:如果是ubuntu平台,需要在命令前加“sudo”,如果在某些 *** 作需要管理员才能 *** 作,ubuntu无需切换到root用户即可 *** 作,只需加“sudo”即可。sudo是ubuntu平台下允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,减少了root 用户的登陆和管理时间,提高了安全性。

方法一:

方法二:

groupadd 新建组账号 groupdel 组账号 cat /etc/group 查看用户组

使用方法:usermod -g 用户组 用户名

新创建的用户,默认不能sudo,需要进行一下 *** 作

-g用来制定这个用户默认的用户组

-G一般配合'-a'来完成向其它组添加

chmod 修改文件权限有两种使用格式:字母法与数字法。

字母法:chmod u/g/o/a +/-/= rwx 文件

cal命令用于查看当前日历,-y显示整年日历

设置时间格式(需要管理员权限):

date [MMDDhhmm[[CC]YY][ss]] +format

CC为年前两位yy为年的后两位,前两位的mm为月,后两位的mm为分钟,dd为天,hh为小时,ss为秒。如: date 01020304201655。

显示时间格式(date '+%y,%m,%d,%H,%M,%S'):

进程是一个具有一定独立功能的程序,它是 *** 作系统动态执行的基本单元。

ps命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:

top命令用来动态显示运行中的进程。top命令能够在运行后,在指定的时间间隔更新显示信息。可以在使用top命令时加上-d 来指定显示信息更新的时间间隔。

在top命令执行后,可以按下按键得到对显示的结果进行排序:

kill命令指定进程号的进程,需要配合 ps 使用。有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束

使用格式:

kill [-signal] pid

df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。

du命令用于统计目录或文件所占磁盘空间的大小,该命令的执行结果与df类似,du更侧重于磁盘的使用状况。

du命令的使用格式如下: du [选项] 目录或文件名

grep egrep区别

grep 默认不支持扩展 但可以通过-E 选择来支持扩展正则

egrep 支持扩展正则

关于正则与扩展正则的区别可以看我另一篇shell 正则的介绍

文件处理顺序 以行为单位,逐行进行处理

默认只输出与表达式相匹配的文本行

基本用法

- 格式1:egrep [选择] '正则表达式' 文件

- 格式2:前置命令 | egrep [选择] '正则表达式'

• egrep命令工具 (扩展正则命令)

• 常用命令选项

•grep 正则表达式,用来查找过滤文档的工具符号

grep "root" user //在user文档中查找有单词root的行

grep "^root" user //在user文档中查找以单词root开头的行

grep "bash " user //查找空行

grep "^ " user //查找以空格开头的行

grep "[rot]" user //查找字母r或者o或者t

grep "roo[tn]" user //查找root或者roon

grep "[^rot]" user //查找字母r或者o或者t之外的内容

grep "[a-z]" user //查找小写字母

grep "[A-Z]" user //查找大写字母

grep "[a-Z]" user //查找所有字母

grep "[0-9]" user //查找数字

grep "rt" user //查找以r开头t结尾中间有2个任意字符的单词

grep "r " user //查找以r开头后面任意字符 相当手通配符

grep "ro" user //查找以r开头后面有或没有字母o的单词,o可以出现任意次

grep "o{1,2}" user //查找o出现1次到2次的行

grep "o{2,3}" user //查找o出现2次到3次的行

grep "o{2}" user //查找o出现2次的行

grep "o{1,} " user //查找o出现1次以及1次以上

grep "(:0){2}" user //查找:0(数字零)连续出现2次的行

扩展正则

egrep "o+" user //查找o出现1次以及1次以上

egrep "o" user //查找o出现0次或1次

egrep "o{1,2}" user //查找o出现1次到2次的行

egrep "o{2,3}" user //查找o出现2次到3次的行

egrep "o{2}" user //查找o出现2次的行

egrep "o{1,}" user //查找o出现1次以及1次以上

egrep "(:0){2}" user //查找:0(数字零)连续出现2次的行

egrep "bash|nologin" user //查找bash或者nologin

egrep "\bthe\b" a //查找单词the,前后是空格或者特殊符号

案例:

正则表达式匹配练习

1)典型的应用场合:grep、egrep检索文本行

grep命令不带-E选项时,支持基本正则匹配模式。比如“word”关键词检索、“^word”匹配以word开头的行、“word$”匹配以word结尾的行……等等。

输出以“r”开头的用户记录:

输出以“localhost”结尾的行:

若希望在grep检索式同时组合多个条件,比如输出以“root”或者以“daemon”开头的行:

而若若使用grep -E或egrep命令,可支持扩展正则匹配模式,能够自动识别 |、{} 等扩展正则表达式中的特殊字符,用起来更加方便,比如:

或者

使用grep -E 与 使用egrep命令完全等效,推荐使用后者,特别是涉及到复杂的正则表达式的时候。

2)grep、egrep命令的-q选项

选项 -q 表示 quiet(静默)的意思,结合此选项可以只做检索而并不输出,通常在脚本内用来识别查找的目标是否存在,通过返回状态 $ 来判断,这样可以忽略无关的文本信息,简化脚本输出。

比如,检查/etc/hosts文件内是否存在19216844的映射记录,如果存在则显示“YES”,否则输出“NO”,一般会执行:

这样grep的输出信息和脚本判断后的提示混杂在一起,用户不易辨别,所以可以改成以下 *** 作:

是不是清爽多了,从上述结果也可以看到,使用 -q 选项的效果与使用 &> /dev/null的效果类似。

3)基本元字符 ^、$ —— 匹配行首、行尾

输出注释的配置行(以#开头的行):

统计本地用户中登录Shell为“/sbin/nologin”的用户个数:

提示: -m10仅在文件的前10行中过滤,后面的行不再过滤。

结合 -c 选项输出匹配的行数

使用 -c 选项可输出匹配行数,这与通过管道再 wc -l的效果是相同的,但是写法更简便。比如,统计使用“/bin/bash”作为登录Shell的正常用户个数,可执行:

或者

4)基本元字符 —— 匹配任意单个字符

以/etc/rclocal文件为例,确认文本内容:

输出/etc/rclocal文件内的空行(用 –v 选项将条件取反):

5)基本元字符 +、、 —— 目标出现的次数

还以/etc/rclocal文件为例:

输出包括 f、ff、ff、……的行,即“f”至少出现一次:

输出包括init、initial的行,即末尾的“ial”最多出现一次(可能没有):

输出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出现任意多次,也可以没有。重复目标只有一个字符时,可以不使用括号:

输出所有行,单独的“”可匹配任意行(包括空行):

输出/etc/passwd文件内“r”开头且以“nologin”结尾的用户记录,即中间可以是任意字符:

6)元字符 {} —— 限定出现的次数范围

创建一个练习用的测试文件:

输出包括ababab的行,即“ab”连续出现3次:

输出包括abab、ababab、abababab的行,即“ab”连续出现2~4次:

输出包括ababab、abababab、……的行,即“ab”最少连续出现3次:

7)元字符 [] —— 匹配范围内的单个字符

还以前面的测试文件bracettxt为例:

输出包括abc、abd的行,即前两个字符为“ab”,第三个字符只要是c、d中的一个就符合条件:

输出包括大写字母的行,使用[A-Z]匹配连续范围:

8)单词边界匹配

以文件/etc/rclocal为例:

输出包括单词“init”的行,文件中“initialization”不合要求:

或者:

输出包括以“ll”结尾的单词的行,使用 > 匹配单词右边界:

或者:

9)多个条件的组合

通过dmesg启动日志查看蓝牙设备、网卡设备相关的信息:

以上就是关于Linux下Grep命令的详细使用方法全部的内容,包括:Linux下Grep命令的详细使用方法、工作中总结的常用linux命令(Ⅱ)、linux 中用vi 命令查看文件,为什么文件中每一行的结尾会出现两个^M^M.这是怎么产生的,代表什么符号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9564551.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存