linux常用命令
find
- 主要用于查找文件
- 常用参数说明
- -name 按名称查询
find . -name "*.del" -ok rm {} \; #查找del后缀名文件删除,并一一确认
find . -path ./testDir -prune -o -name '*.txt' -print #当前目录排除testDir下查找名称后缀名为txt的文件
xargs
- xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数
- 常用参数说明
- -d 指定分割符,默认以空白分割
- -p 打印即将执行的命令,输入y运行
- -n 每次传递指定个数的参数执行
- -E 只执行指定命令行参数前的命令
echo '--help' | xargs cat # aka [cat --help]
echo 'aa$bb$cc' | xargs -d '$' #以#分割字符后依次作为命令参数
echo 'aa$bb$cc' | xargs -d '$' -p echo #会提示是否执行
echo 'aa bb cc' | xargs -n 2 echo #一次传递两个参数执行命令
echo 'aa$bb$cc' | xargs -d '$' | xargs -E 'bb' echo # aa
文本处理 linux三剑客
grep
-
适合文本查找 匹配
-
【Global Regular Expression Print】它可以使用正则表达式搜索文本,并把匹配的行打印出来。
grep [option]...pattern[file]- -c 只输出匹配行的计数
- -i 不区分大小写
- -n 显示匹配行及行号
- -s 不显示不存在或无匹配文本的错误信息
- -l 查询多文件时只输出包含匹配字符的文件名
- -v 显示不包含匹配文本的所有行
pattern的参数:
- \ 忽略正则表达式中特殊字符的原有含义
- ^ 匹配正则表达式的开始航
- $ 匹配正则表达式的结束行
\<从匹配正则表达式的行开始\>从匹配正则表达式的行结束- [] 单个字符,例如:[a]
- [ - ] 范围,例如[a-z]
- . 所有单个字符
*任意字符,长度可以为0
使用示例:
grep 'daemon' /etc/passwd #查找包含daemon的文本 grep -n 'daemon' /etc/passwd #显示匹配内容的行数 grep -l 'daemon' /etc/passwd /etc/host.conf #只显示匹配的文件名 grep '\<daemon\>' /etc/passwd #查询包含单词daemon的文本 grep .emon /etc/passwd grep -c nologin /etc/passwd #查询包含nologin的行数 grep 'message\|da' /etc/passwd #查询包括message或者da的内容 grep 'nologin' /etc/passwd | grep 'dae' #查询既包括nologin又包括 dae的内容
sed
-
更适合编辑文本,可依照脚本的指令来处理,编辑文本文件
-
参数说明
sed [option] ... {script-only-if-no-other-script}[input-file]...-e <script>以指定的script来处理输入的文本-f <script>以指定的script文件来处理输入的文本- a 新增
- d 删除
- i 插入
- p 打印
- s 取代
echo hello, world! > hello.txt && echo hello, tomorrow ! >> hello.txt
sed '1d' hello.txt #删除第一行
sed 's/hello/hi' hello.txt #替换hello为hi
sed -e c\nice hello.txt #将每一行替换为nice
sed -i 1a\hello hello.txt #第一行后面添加hello 会改变源文件
sed -n '1,2p' hello.txt #显示第一行到第二行的内容
awk
-
逐行处理,更适合格式化文本,对文本进行较复杂的格式处理
awk '{[pattern] action}' filename- -F 指定文件分割符
-f scriptfile从脚本中获取awk命令
awk '{print $1,$2}' hello.txt #打印第一二列的内容
awk 'length>14' hello.txt #打印长度大于14的内容
awk -F , '{print $1}' hello.txt #以,为分隔符打印第一列的内容
awk -v a=1 -v b=2 '{print $1a,$2b}' hello.txt
awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS"}{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' hello.txt
了解
tee
- 把结果输出到标准输出,另一个副本输出到相应文件
- -a 追加操作
echo 'hello' | tee hello.txt #将hello输出到hello.txt
echo 'world' | tee -a hello.txt #将world追加到hello.txt
rev
- 内容反转
echo '123456' | rev
rev < hello.txt
nl
- 输出内容与行号
nl hello.txt
ln
- 文件链接
- -s 软链接,inode不一样
ls -il # 可查看inode
ln -s hello.txt soft.txt # inode不一样 删除hello.txt后soft.txt无效
ln hello.txt hard.txt # inode一样 不可链接目录