《Linux命令、编辑器与Shell编程》读书笔记3-linux命令中的特殊字符和正则表达式

由于这里是在bash下做的实验,有些地方与csh略有不同,详情:

http://www.cnblogs.com/itech/archive/2012/02/21/2361184.html


一、linux命令中的特殊字符

1. 双引号"

(1)打印输出时将系统保留符号屏蔽、以保证正常输入,如:

echo Alix; Mary

echo "Alix; Mary"

*分号;表示一个命令结束、另一个 命令开始执行,如果不加"的话,则只输出Alix,执行到Mary时会报错

(2)在双引号中引用其他命令输出符,如引用变量:

name="mary"

echo "Alix;$name"

echo "$name"

*当然,在第三行命令中不加”也能执行出正确的结果,但是为了在编写大型脚本时降低错误率,建议养成把特殊引用符都放到“内的良好习惯

此外,还可以直接引用命令输出,这时要用反引号`把命令字括起来(下面会详细讲道):

echo "Now time: `date -u` "

(3)在命令中使用双引号避免shell误解,如:

name="jhon alix jack;mary roman"

echo $name | grep "jhon alix"

echo $name | grep jhon alix

第二行由于使用了",能够正确执行、找到包含jhon alix的变量,但如果不加、第三行命令会报错。

2. 单引号‘

单引号的用途和双引号一致,此外还表示引用中的引用,因为shell中不允许一条命令中的两个引号都使用双引号或单引号;如:

awk 'BEGIN{system("date")}'

3. 反引号`:命令引用符,如:

ls -l `cat /etc/shells`

echo "Now time: `date +'%T'`"

echo "Are using this system users: `who | awk '{ARR [FNR]=$1;}END {printf "%s %s\n" ,ARR[1],Arr[2];}'`"

4. 变量引用和命令转换符$,如:

#将命令date的执行结果赋给变量a

a=`date`

echo "The time is: $a"

#如果是csh,需要在变量名前面加set

#下面的格式,只能在bash里用,csh里会只能用ls -l `cat /etc/shells`实现该功能

ls -l $(cat /etc/shells)

5. 屏蔽特殊符号字符\,如:

#bash格式

echo "Please pay \$15."

echo "Tom:\"What is your name?\""


/*下面6、7两条讲的是文件名通配符,要和文件内容的匹配符区分开*/

6. 字符范围匹配符[]

#查看当前目录中以kls中任意字幕开头的所有文件:

ls -l [kls]*

#查看文件名中包含0~9的文件:

ls -l *[0-9]*

#查看文件名中包含a~Z的文件:

ls -l *[a-Z]*

7. 范围排除[!]

#查看文件名是三个字符且第一个在0~9范围、第二个不在0~9范围、第三个任意的文件:

ls -l [0-9][!0-9]*

*此外还有单字通配符?,多字通配符*


8. 逻辑或||

command1 || command2

先执行command1,如果成功则直接显示结果、跳过command2;否则再执行command2

例1:

mail -f /root/mbox >/dev/null || echo "Permission denied"

9. 逻辑与&&

command1 && command2

和逻辑或相反,先执行command1,如果成功,才执行command2;否则执行终止:

wget http://www.baidu.com &>/dev/null && echo "`date` Host baidu service is running."

可以和下面的语句比较一下结果的不同:

wget http://www.baidu.com || echo "`date` Host baidu service is running."


10. 括号:

如果将命令放到圆括号内,执行多命令时会优先执行括号内的命令;而花括号则在函数中被使用(见第17章)


二、命令中的正则表达式:

正则表达式不止在shell脚本中使用,平时在grep、vi、awk、sed等命令工具中也可以使用。

1. 与文件名匹配同理,使用反斜杠\屏蔽特殊字符,如:

# ; $ ` " . ^ ? [ ] \ || &&

(1)比如做乘法运算时:

expr 25 \* 25

625

(2)在命令中输出特殊符号:

echo \#notes\\

#notes\

(3)表示文件名^^.txt

/\^\^\.txt/


2. 单字符匹配符.

*使用查找模式时,通常要将表达式放入两个斜杠 //中,然后再放入命令中。后面不在赘述。

/.i../,有可能匹配到xian,就这个意思。


3. *单/多字符匹配符


4. 行首匹配符^

用来匹配每一行第一列中符合搜索条件的字符串:

/^eth0/


5. 行尾匹配符$

与上面类似,用来匹配行尾符合搜索条件的字符串:

/love$/

虽然其他行也有love这个词,但如果它不在行尾、就不会被搜索到


6. 范围匹配[ ]和排除范围匹配符[^],使用方式如下:

[a-Z] (等同于[a-z A-Z])

/[Ll]ove/

[0-9]

[^a-Z]


7. 词首\<、词尾匹配符\>:

搜索以eth0四个字符开头的文本:

grep -rl "\<eth0" *

*这里注意和^$区别

搜索以love结尾的文本:

grep -rl /love\>/ *

搜索包含整个单词the的文本:

grep -rl /\<dropped\>/ *


8. 重复次数匹配符 X\{\}

搜索当前文件夹下字母r出现2次的文本:

grep -rl "r\{2\}" *

搜索当前文件夹下字母r至少出现2次的文本:

grep -rl "r\{2,\}" *

搜索当前文件夹下字母r出现2至10次的文本:

grep -rl "r\{2,10\}" *

搜索当前文件夹下单词Link至少出现1次的文本:

grep -rl "Link\{1,\}" *


9. 正则表达式举例:

搜索包含IP地址的文件:

grep -rl "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" *

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值