Linux:通配符与转义字符

命令行的通配符

通配符有点类似于正则表达式,可以代替某些字符。

linux中通配符及其含义:

通配符含义
*任意字符
?单个任意字符
[a-z]单个小写字母
[A-Z]单个大写字母
[a-Z]单个字母
[0-9]单个数字
[[:alpha:]]任意字母
[[:upper:]]任意大写字母
[[:lower:]]任意小写字母
[[:digit:]]所有数字
[[:alnum:]]任意字母加数字
[[:punct:]]标点符号

在/dev目录下找到以sda开头的文件:

[root@linuxprobe ~]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Sep 21 17:15 /dev/sda
brw-rw----. 1 root disk 8, 1 Sep 21 17:15 /dev/sda1
brw-rw----. 1 root disk 8, 2 Sep 21 17:15 /dev/sda2
[root@linuxprobe ~]#

如果我想匹配的式sda后面有一个字符的:

[root@linuxprobe ~]# ll /dev/sda?
brw-rw----. 1 root disk 8, 1 Sep 22 10:53 /dev/sda1
brw-rw----. 1 root disk 8, 2 Sep 22 10:53 /dev/sda2

如果我只想匹配数字:

[root@linuxprobe ~]# ll /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 Sep 22 10:53 /dev/sda1
brw-rw----. 1 root disk 8, 2 Sep 22 10:53 /dev/sda2

将文本的字母内容全部换成大写:

[root@linuxprobe ~]# cat initial-setup-ks.cfg | tr a-z A-Z
#VERSION=RHEL8
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG  --STARTXONBOOT
# LICENSE AGREEMENT
EULA --AGREED
# USE GRAPHICAL INSTALL
GRAPHICAL
# NETWORK INFORMATION
NETWORK  --BOOTPROTO=DHCP --DEVICE=ENS160 --ONBOOT=OFF --IPV6=AUTO --ACTIVATE
NETWORK  --BOOTPROTO=DHCP --HOSTNAME=LINUXPROBE.COM

——————以下信息省略——————

这里的a-z A-z 也可以替换成[:lower:] [:upper:]

除了用在查看文本上面,通配符还能用在创建文件上面,可以一次性创建多个文件:

[root@linuxprobe ~]# touch {Afile.txt,Bfile.txt,Cfile.txt}
[root@linuxprobe ~]# ll *file.txt
-rw-r--r--. 1 root root 0 Sep 22 11:23 Afile.txt
-rw-r--r--. 1 root root 0 Sep 22 11:23 Bfile.txt
-rw-r--r--. 1 root root 0 Sep 22 11:23 Cfile.txt

还可以输出一些特定的信息:

[root@linuxprobe ~]# echo file{1,2,3,4,5,6,7}
file1 file2 file3 file4 file5 file6 file7

常用转义字符

除了通配符,转义字符也可以用来处理特殊数据,可以灵活的使用变量,命令执行结果。

4个常见的转义符:

  • 反斜杠(\):使反斜杠后面的变量变为普通的字符串
  • 单引号(‘’):转义其中的所有变量变为普通的字符串
  • 双引号(“”):保留其中的变量属性,不进行转义处理
  • 反引号(``):把其中的命令执行后的结果返回

我们先定以一个变量,然后使用双引号输出:

[root@linuxprobe ~]# PRICE=5
[root@linuxprobe ~]# echo "price is $PRICE"
price is 5

如果我们想要输出price is $5怎么办?这样吗?

[root@linuxprobe ~]# echo "price $$PRICE"
price 2791PRICE

这是个什么东西?怎么跟我们想的不一样?原来$$的作用是显示当前程序的进程号码,刚好冲突了,我们需要另外想办法。

使用反斜杠来转义就好了:

[root@linuxprobe ~]# echo "price is \$$PRICE"
price is $5
[root@linuxprobe ~]# 

来试试反引号的作用:

[root@linuxprobe ~]# echo `uname -a`
Linux linuxprobe.com 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@linuxprobe ~]# uname -a

其实对于双引号来说,我们不加双引号也是同样的效果:

[root@linuxprobe ~]# echo AA BB CC
AA BB CC
[root@linuxprobe ~]# echo "AA BB CC"
AA BB CC

那么我们如何区分呢?这跟命令的参数有关,比如第一个命令,我们就不知道它的参数到底有几个,是一个还是三个。基于这种情况,我们对有空格的参数最好加上双引号

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值