linux入门小知识,你在里面总会有发现

一 、 grep及egrep的基本介绍:

首先我们要知道grep的这个命令的本身意思即:

grep [Global search REgular expression and Print out the line ]  全局搜索正则表达式匹配到的内容,并且打印出匹配内容所在行

grep 是一个很常用但是也很强大的搜索工具,它是以正则表达式为基础,搜索文本文件中符合要求的字符串,并且显示所匹配的字符串所在行。

grep搜索的内容是以一行来显示的,当然我们可以使用一些特别的选项来只显示我们所匹配到的内容,这个稍后会为你讲解到,grep一般会与(|)管道

像结合使用,grep+基本正则表达式+管道 则是我们在实际操作中用到最多的组合。

二、  grep 命令的使用方法

使用语法格式:

grep [OPTIONS] PATTERN [FILE...]

-c:只输出匹配行的计数。

-i:不区分大 小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-e: 即egrep,配合扩展正则表达式使用和grep同样的用法

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:反向选取,显示不包含匹配文本的所有行

-o:仅显示匹配的字串,而非字串所在的行

-A +#:显示匹配行后#行

-B +#:显示匹配行前#行

-C +#:显示匹配行前后各#行

egrep = grep -e 用法与grep相同,配合扩展正则表达式使用,打印出匹配到的字符串。我们前面一直在说grep或egrep 配合正则表达式使用,那么什么是正则表达式呢?下面为你介绍,linux入门很重要的知识,正则表达式

三、正则表示 RE[Regular Expression]

正则表示基础概念

是一类字符所书写的模式,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。其中许多字符不表示其字面意义,而是表达控制或通配等功能,简明的说,正则表达式就是使用一些字符组合成的规则,来配合搜索命令让用户方便快捷的完成目的。

正则表示分 基础正则表达式 与 扩展正则表达式 两种类型。

一)基本正则表达式:

基本正则表达式通常使用的元字符如下:

1、 字符匹配

. :    表示任意单个字符

[]:     匹配指定范围内的任意单个字符

    [0-9]     匹配0-9内的任意单个数字同[[:digit:]]

    [a-z]匹配a-z内的任意单个字母同[[:lower:]]

    [A-Z]与[a-z]类似   同[[:upper:]]

    [[:space:]]     匹配空格

    [[:digit:]]匹配任意单个数字

    [[:lower:]]匹配任意单个小写字母

    [[:upper:]]匹配任意单个大写字母

    [[:punct:]]匹配任意单个字符

    [[:alpha:]]匹配任意单个字母

    [[:alnum:]]匹配任意单个字母或数字

    2、 次数匹配元字符,用于指定其前面的字符出现的次数

    * : 表示任意长度,他前面的字符可以出现任意次

    \? : 表示0次或1次,它前面的字符可有可无

    例如:x\?y 有以下可能:

    y 或者 xy

    \{m\}: m次,它前的字符要出现m次

    例如:x\{2\}y

    可能为: xy, xxy, y, xxxxy, xyy

    \{m,n\}: 至少m次,至多n次

    例如:x\{2,5\}y

    可能为: xy, y, xxy

    \{m,\}:至少m次

    \{0,n\}: 至多n次

    .*:任意长度的任意字符

    例如:显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

    [[email protected] ~]# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

    root (hd0,0)

    kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet

    initrd /initramfs-2.6.32-431.el6.x86_64.img

    3、 位置锚定元字符,用于指定匹配字符所在行的具体位置

    ^: 行首锚定;

    后跟的字符出现在行首

    例如:搜索/etc/passwd 文件内以a开头的行

    [[email protected] ~]# grep --color=auto "^a" /etc/passwd

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

    abrt:x:173:173::/etc/abrt:/sbin/nologin

    apache:x:48:48:Apache:/var/www:/sbin/nologin

    $: 行尾锚定:

    后跟的字符出现在行尾

    例如: 搜索/etc/passwd 文件内以bash结尾的行(由于内容太多,我只列出几行做示例)

    [[email protected] ~]#grep "\bbash\b$" /etc/passwd

    x1:x:3320:3320::/home/x1:/bin/bash

    x2:x:3321:3321::/home/x2:/bin/bash

    mmm1:x:3322:3322::/home/mmm1:/bin/bash

    mmm2:x:3323:3323::/home/mmm2:/bin/bash

    不包含特殊字符的连续字符组成的串叫单词:

    \<或\b: 词首,出现于单词左侧,

    >或\b: 词尾,出现于单词右侧

    ^$: 表示空白行

    4、分组和引用

    分组:

    \(\):把小括号内的内容当做单个字符来使用

    引用:

    \#: 引用第n个括号所匹配到的内容,而非模式本身。

    例如: \(xyz\).*\1 = xyz.*xyz

    二) 扩展正则表达式

    扩展正则表达式主要是指 egrep fgrep 及几个相关的特殊元字符

    特殊元字符

    +  表示它前面的字符至少出现一次。

    ?  表示0个或1一个字符,与基本正则表达式里的\?不同,请注意

    |  用或的方式选择|两边的字符。

    ()  用户组字符串,就是把元字符内的看做是一个组一个整体。

    四、举2个grep + 正则表达式的结合使用示例:

    (1)显示当前系统上root、fedora或user1用户的信息;

    [[email protected] ~]#egrep "^(root|fedora|user1):" /etc/passwd

    root:x:0:0:root:/root:/bin/bash

    本例题,用到行首锚定^和扩展正则表达式中的"|",所以要用egrep,由于我的系统上每添加fedora和user1用户,故只显示root的信息。

    (2)使用echo命令输出一个路径,而后使用grep取出其基名

    [[email protected] ~]#echo "/etc/passwd/" | grep -o -E "[[:alnum:]]+/?$"

    passwd/

    这个例题中,用到了grep ,管道,以及扩展正则表达式,可以说是以后最常用到的模式,来处理教复杂点的问题,同时也用到了正则表达式的各种元字符。

    linux入门小知识,你在里面总会有发现

    时间: 2024-10-28 03:47:14

    linux入门小知识,你在里面总会有发现的相关文章

    linux入门基础知识及简单命令介绍

    linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

    大数据入门小知识

    之前写过大数据入门小知识和大数据入门小知识进阶篇,今天为大家带来大数据入门小知识高阶篇. 推荐一个大数据学习群 119599574晚上20:10都有一节[免费的]大数据直播课程,专注大数据分析方法,大数据编程,大数据仓库,大数据案例,人工智能,数据挖掘都是纯干货分享,你愿意来学习吗? 大数据入门小知识高阶篇,主要讲述的是因为大数据而衍生出来的一系列技术与科技创新. 说到因为大数据而衍生出来的一系列技术与科技创新,相信我们首先都会想到人工智能(Artificial Intelligence),英文

    Linux入门基础知识

    1.计算机的组成及其功能. 计算机系统主要分为硬件系统和软件系统两部分. (1)硬件系统由五部分组成,其中包括: 控制器:调度程序.数据.地址,协调计算机各部分工作及内存与外设的访问: 运算器:对数据进行加工处理: 存储器:存储程序.信号.命令,数据等信息,并在需要时提供这些信息,如内存和硬盘: 输入设备:将程序.命令.文字,数据等信息输入到计算机系统,如键盘.鼠标等: 输出设备:将数据.文字.控制信号等各种信息输送出来,如显示器.打印机等:其中控制器和运算器组成CPU. (2)软件系统由两部分

    Linux脚本小知识之&quot;$x&quot;含义

    Linux系统中的Shell脚本语言内设了用于接收参数的变量,变量之间可以使用空格间隔.例如$0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1.$2.$3--则分别对应着第N个位置的参数值. 下面进行一个简单的小脚本编写:[[email protected] tmp]# vim shell.sh 编写完成后执行一下脚本:[[email protected] tmp]# sh shell.sh wo s

    linux 入门基础知识(二)

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. cp  [option..]  source  dest  复制命令 mv  [option..]  source  dest  移动.重命名命令, rm  [option..]  source  dest  删除命令 -i 交互参数 -r 递归参数 -f 强制执行参数 2.bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示. bash中用 $? 表示保存最近一条命令的执行状态结果, 0 表示成

    linux 入门基础知识 7

    #########虚拟机的安装###### 用超级用户 1. 2.脚本 非交互式 [[email protected] ~]# virt-install \ > --name linux \ > --file /var/lib/libvirt/images/linux.qcow2 \ > --file-size 8 \ > --ram 800 \ > --cdrom /home/kiosk/Desktop/rhel-server-7.2-x86_64-dvd.iso &

    linux 入门基础知识

    #######虚拟机控制###### [[email protected] Desktop]$ rht-vmctl start desktop       ###开启虚拟机desktop Starting desktop. [[email protected] Desktop]$ rht-vmctl view desktop        ###显示虚拟机desktop [[email protected] Desktop]$ rht-vmctl poweroff desktop    ###关

    linux 入门基础知识 1

    #######虚拟机控制###### [[email protected] Desktop]$ rht-vmctl start desktop       ###开启虚拟机desktop Starting desktop. [[email protected] Desktop]$ rht-vmctl view desktop        ###显示虚拟机desktop [[email protected] Desktop]$ rht-vmctl poweroff desktop    ###关

    python入门小知识2

    if语句小程序示例 1. user_name = "wang"password = 123inp_user_name = input(">>:")inp_password = int(input (">>:"))if inp_user_name == user_name and inp_password == password:    print("pass")else:    print("