通配符和正则表达式区别?
通配符用在用户命令行bash环境,而正则表达式用于linux三剑客(awk, sed, grep)
那,有哪些通配符?
* 所有字符 五星
ls *.txt # 列举目录下所有.txt结尾的文件 du -sh /* # 计算 / 目录下各目录总大小 find /home -type f -name '*.py' # 找到 /home 下所有以 .py结尾的文件
? 任意一个字符
ls ????.sh # ?相当于占位符,列出 .sh 前面任意4个字符的文件信息
; 两个命令的分隔符,两个命令之间没有任何关系
echo 'hello'; echo 'word' # 两行打印,可以通过 -n 参数表示一行打印,-e 让一些 \t \n 不在是字符
# 配置文件注释,注释掉的配置行失效
| 效率不高,前者输出是后者输入
cat -n /etc/profile | grep -i 'histsize' # -n 添加行号, -i 不区分大小写
~ 当前用户家目录
cd ~ # 回到当前用户家目录
- 上一次目录
cd – # 返回上一次工作目录
$ 变量前需要加的符号
echo $LANG # 打印LANG变量
/ 路径分隔符,也是根
‘ 单引号,所见所得
echo '`date`' # 打印 `date`
" 双引号,会把 ` 括起来的当做bash命令先解析,输出结果
echo "`date`" # 会解析date命令,并把结果交个echo执行 echo $(date) # 和上面一样 echo `date` # 和上面一样 ls -l $(which mkdir) # 查询 mkdir 命令所在目录详细信息
` 反引号,解析命令
ls -l `which mkdir` # 查询 mkdir 命令所在目录详细信息
{} 命令组合 和 序列
touch oldboy{1..10} # 创建oldboy1 到 oldboy10 文件 touch oldboy{a..f} # 创建 oldboya 到 oldboyf 文件 cp a.txt{..bak} # 给a.txt 文件当前备份为 a.txt.bak mkdir -p /data/{1, 2}/old # 给不同目录下创建相同目录
&& 与,and,前面命令执行成功执行后面一个任务
! 非, not
|| 或, or, 前一个命令执行失败执行后面一个任务