第十三篇:linux中的特殊符号
引号系列⭐⭐⭐⭐⭐
引号 | 含义 | |
单引号 | 单引号里面的内容会原封不动的输出 | 什么都不扩展 |
双引号 | 与单引号类似,对双引号里面的特殊符号会进行解析,对于{}花括号不能解析 | 允许部分扩展 |
不加引号 | 和双引号类似,支持花括号的通配符 | |
反引号 | 优先执行,先执行反引号里面的命令 |
[root@yuan ~]# echo '`hostname` yuanxiaojiang $(whoami) $UID {1..5}' `hostname` yuanxiaojiang $(whoami) $UID {1..5} # 什么都不扩展 [root@yuan ~]# echo "`hostname` yuanxiaojiang $(whoami) $UID {1..5}" yuan yuanxiaojiang root 0 {1..5} # 允许部分扩展 [root@yuan ~]# echo `hostname` yuanxiaojiang $(whoami) $UID {1..5} yuan yuanxiaojiang root 0 1 2 3 4 5
重定向符号系列
重定向:改变输出的方向(将命令的输入和输出导向文件或其他命令,而不是默认的终端)
重定向 | 含义 | 应用场景 |
> 或 1> | 标准输出重定向:先清空文件,然后写入 | 大部分情况下先清空的时候可以使用 |
>> 或 1>> | 标准输出追加重定向:直接写到文件的末尾 | 修改配置文件(表示追加的时候) |
2> | 标准错误输出重定向:先清空文件内容,然后写入错误信息 | 一般用于获取所有的输出(较少单独用) |
2>> | 标准错误输出追加重定向:直接将错误信息写到文件的末尾 | 一般用于获取所有的输出(较少单独用) |
命令 >>文件名 2>&1 | 无论对错都把结果写入到文件中 | 定时任务、脚本中常用 |
命令 &>>文件名 | 无论对错都把结果写入到文件中 | 定时任务、脚本中常用 |
< 或 0< | 标准输入重定向 | 搭配xargs、tr命令使用(使用较少) |
<< 或 0<< | 标准输入追加重定向 | 与cat搭配使用表示向文件中写入多行内容 |
标准输出重定向和标准错误输出重定向
[root@yuan ~]# echo yuanxiaojiang >>yuan.txt [root@yuan ~]# cat yuan.txt yuanxiaojiang [root@yuan ~]# ech yuanxiaojiang 2>>yuan.txt [root@yuan ~]# cat yuan.txt yuanxiaojiang -bash: ech: 未找到命令
同时记录正常输出与错误输出⭐⭐⭐⭐⭐
# 最容易理解的方法 [root@yuan ~]# ech yuanxiaojiang >>yuan.txt 2>>yuan.txt [root@yuan ~]# cat yuan.txt -bash: ech: 未找到命令 # 日常常用的方法之一 [root@yuan ~]# ech zhongguo >>yuan.txt 2>&1 [root@yuan ~]# cat yuan.txt -bash: ech: 未找到命令 [root@yuan ~]# echo zhongguo 2>>yuan.txt 1>&2 [root@yuan ~]# cat yuan.txt -bash: ech: 未找到命令 zhongguo # 最简写法 [root@yuan ~]# echo Chinese &>>yuan.txt [root@yuan ~]# cat yuan.txt Chinese
输入重定向符号(xargs、tr)
[root@yuan ~]# echo `seq 1 10` >yuan.txt [root@yuan ~]# cat yuan.txt 1 2 3 4 5 6 7 8 9 10 [root@yuan ~]# xargs -n3 <yuan.txt 1 2 3 4 5 6 7 8 9 10
追加输入重定向符号(cat)⭐⭐⭐⭐⭐
# <<用于与cat命令实现向文件中写入多行内容 格式:cat >文件<<结束标记 结束标记:结束标记两边不要有多余符号
EOF (end of file) [root@yuan ~]# cat >yuan.txt<<EOF
另一种格式 cat <<EOF >yuan.txt > I > love > linux > EOF
通配符
用于给Linux中大部分命令使用,通过文件名批量查找文件
符号 | 含义 |
*星号 | 表示所有 |
{}花括号 | 输出序列,常与echo、touch、mkdir使用 |
? | 表示任意一个字符 |
[!] [^] | 取反 |
[] |
{}
# 基本用法 echo {a..z} echo {1..10} # 输出等宽的数字序列 01 02 echo {01..10} # 01 02 echo {001..100} # 001 002 # 无规律输出 [root@yuan ~]# echo sunshine{yuan,xiao,jiang} sunshineyuan sunshinexiao sunshinejiang
# 案例:利用{}备份文件 [root@yuan ~]# cp yuan.txt{,.bak} [root@yuan ~]# ll yuan.txt* -rw-r--r--. 1 root root 21 10月 9 16:45 yuan.txt -rw-r--r--. 1 root root 21 10月 9 17:43 yuan.txt.bak
?(任意一个字符)
# 案例:找出/bin目录下面仅有一个字符组成的命令 [root@yuan ~]# ls -l /bin/? -rwxr-xr-x. 1 root root 41488 8月 20 2019 /bin/[ -rwxr-xr-x. 1 root root 19912 10月 1 2020 /bin/w
正则表达式⭐⭐⭐⭐⭐
正则概述
- 正则表达式本质是一些符号:^ $ ^$ . * .* [] [^] | + () {} ?
- 正则表达式对字符进行过滤
- http://nbre.oldboylinux.cn/playground/
正则与通配符区别
用途 | 支持的命令 | |
正则表达式 | 匹配文件内容(匹配字符) | 三剑客命令、开发语言 |
通配符 | 匹配文件名(命令参数) | Linux大部分命令 |
正则分类
分类 | 符号 |
基础正则 | ^ $ ^$ . * .* [] [^] |
扩展正则 | | + () {} ? |
环境准备
alias grep='grep --color=auto' # 让自己的命令有颜色
unalias grep # 取消
cat >/yuan/re.txt<<EOF I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com my qq is 49000448 not 4900000448. my god ,i am not oldbey,but OLDBOY! EOF
基础正则
基础正则 | 含义 |
^ ⭐⭐⭐⭐⭐ | 以…开头的行 |
$ ⭐⭐⭐⭐⭐ | 以…结尾的行 |
^$ ⭐⭐⭐⭐⭐ | 空行 |
. | 任意一个字符 |
\ | 转义字符、撬棍 |
* | 前一个字符出现0次或0次以上 |
.* ⭐⭐⭐⭐⭐ | 所有 |
[] ⭐⭐⭐⭐⭐ | [abc] a或b或c,[]相当于一个字符 |
[^] | [^abc] 匹配除abc之外的内容,[]相当于一个字符 |
正则表达是的贪婪性
贪婪性:正则表达式表示连续出现或表示所有的时候,尽可能多的匹配
^ 以…开头的行
$ 以…结尾的行
^$ 空行,这行中没有任何字符
- 过滤出文件中的空行并显示行号
- 排除空行并显示行号
# 案例:排除/etc/ssh/sshd_config文件中的空行,然后排除以#号开头的行 [root@yuan ~]# grep -v '^$' /etc/ssh/sshd_config |grep -v '^#' HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key
. 任意一个字符(不匹配空行)
过滤的时候会排除空行,点不会匹配空行
\ 转义字符(撬棍):去掉特殊符号的含义
* 前一个字符连续出现0次或0次以上
# 连续的含义 111 数字1出现1次 123 数字连续出现3次 Yuanxiaojiang666 连续出现的数字和大小写字母
.* 所有,任何字符
[] [abc] 表示匹配任意1个字符([]会自动去掉符号中的特殊含义)
[0-9] 匹配数字 [a-z] 匹配小写字母 [A-Z] 匹配大写字母 [a-zA-Z] [a-Z] 匹配大小写字母
[a-zA-Z0-9] [a-z0-9] [0-Z] 匹配大小写字母+数字
[^] [^abc]表示匹配任意一个字符,排除abc(中括号相当于一个字符)
扩展正则
扩展正则 | 含义 |
+ ⭐⭐⭐⭐⭐ | 前一个字符连续出现1次或多次 |
| ⭐⭐⭐⭐⭐ | 或者 |
() ⭐⭐ |
表示整体 sed后向引用或反向引用 |
{} | a{n,m} 前一个字符连续出现至少n次,最多m次 |
? | 前一个字符出现0次或1次 |
Linux三剑客如何支持扩展正则⭐⭐⭐⭐⭐
grep 命令(推荐使用前两个)
grep === egrep 或 grep -E(egrep的别名) egrep '0+' /yuan/re.txt grep -E '0+' /yuan/re.txt grep '0\+' /yuan/re.txt sed 需要使用-r选项 awk 直接支持扩展正则
+ 前一个字符连续出现1次或1次以上
+通常配合[]一起使用
- 取出连续出现的0
- 取出连续出现的数字
| 或者
- 文件中包含oldboy或linux的行
- 在/etc/services过滤出包含ssh或http或smtp的行
- 排除/etc/ssh/sshd_config 中的空行或注释,输出的时候显示行号
# grep -vn '^$\|^#' /etc/ssh/sshd_config # egrep -vn '^$|^#' /etc/ssh/sshd_config
() 表示一个整体,用于后向引用(后向引用sed)
检查系统中tree、vim、sl软件是否安装
{} a{n,m}前一个字符连续出现最少n次,最多m次
格式 | 应用 |
a{n,m} 前一个字符连续出现最少n次,最多m次 | 表示连续出现的范围 |
a{n} 前一个字符连续出现n次 | 匹配固定的次数 |
a{n,} 前一个字符连续出现最少n次 | |
a{,m} 前一个字符连续出现最多m次 |
- 匹配身份证的正则
身份证格式:17位数字+最后一位数字或X

# 文件/yuan/id.txt 谈媚轩 230189199012251659 庾菲刚 23018199012015108 桑春 23018215507074953 范惠融 230182197510240695 霍莎 23018219590413055X 单燕可 230182197007233320 雷聪 23018215709180586 郑芬澜 23018199402088233 阙宁茜 230182198305100379 赵璧桂 23018195312204747 史勤 23018218107207651 项珠 230182195305221943 季艳盛 230182195604045725 吕进 230182196412284021 翟竹静 230182196102271858 翟竹静 23018219610227 翟竹静 2301821922 翟竹静 230181922
- 匹配ip地址的正则
# 简单的ip地址模拟 # 环境创建 echo 10.0.0.{1..254} |xargs -n1 >/yuan/ip.txt # 正则匹配 egrep '[0-9]{1,3}'
? 前一个字符出现0次或1次
perl语言正则表达式(熟悉)
符号 | 含义 |
\d | [0-9] |
\s | 匹配的空字符:空格、tab、[\ \t\r\n\f] |
\w | [0-9a-zA-Z_] 字母、数字、下划线 |
\D | [^0-9] 排除数字 |
\S | 非空字符 |
\W | 排除数字、字母、下划线 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码