Shell常用命令
shell字符
!: 执行历史命令
!!: 执行上一条命令
$: 变量中取内容符
+ - * / %: 对应数学运算 加 减 乘 除 取余数
&: 后台执行
;: 分号可以在shell中一行执行多个命令,命令之间用分号分割
\: 转义字符
``: 反引号 命令中执行命令 echo "today is `date +%F`"
' ': 单引号,脚本中字符串要用单引号引起来,但是不同于双引号的是,单引号不解释变量
" ": 双引号,脚本中出现的字符串可以用双引号引起来
通配符
~: 家目录 # cd ~ 代表进入用户家目录
*: 星号是shell中的通配符 匹配所有
?: 问号是shell中的通配符 匹配除回车以外的一个字符
[list]: 匹配[list]中的任意单个字符
[!list]: 匹配除list中的任意单个字符
{string1,string2,...}: 匹配string1,string2或更多字符串
重定向
> 覆盖输入
>> 追加输入
< 输出
<< 追加输出
管道命令
|: 管道符 上一个命令的输出作为下一个命令的输入 cat filename | grep "abc"
数据检索命令
行检索:grep egrep
字符串检索:cut tr
数据处理命令
数据排序:sort
数据去重: uniq
文本数据合并: paste
数据输出: tee
数据处理: xargs
1. grep: 负责从数据源中检索对应的字符串,行过滤。
grep -i root passwd #忽略大小写匹配包含root的行
grep -w ftp passwd #精确匹配ftp单词
grep -wo ftp passwd #打印匹配到的关键字ftp
grep -n root passwd #打印匹配到root关键字的行好
grep -ni root passwd #忽略大小写匹配统计包含关键字root的行
grep -nic root passwd #忽略大小写匹配统计包含关键字root的行数
grep -i ^root passwd #忽略大小写匹配以root开头的行
grep bash$ passwd #匹配以bash结尾的行
grep -n ^$ passwd #匹配空行并打印行号
grep ^# /etc/vsftpd/vsftpd.conf #匹配以#号开头的行
grep -v ^# /etc/vsftpd/vsftpd.conf #匹配不以#号开头的行
grep -A 5 mail passwd #匹配包含mail关键字及其后5行
grep -B 5 mail passwd #匹配包含mail关键字及其前5行
grep -C 5 mail passwd #匹配包含mail关键字及其前后5行
2. cut数据截取
语法:
cut用于列截取
- -c: 以字符为单位进行分割。
- -d: 自定义分隔符,默认为制表符。\t
- -f: 与-d一起使用,指定显示哪个区域。
cut -d: -f1 1.txt #以:冒号分割,截取第1列内容
cut -d: -f1,6,7 1.txt #以:冒号分割,截取第1,6,7列内容
cut -c4 1.txt # 截取文件中每行第4个字符
cut -c1-4 1.txt #截取文件中每行的1-4个字符
cut -c4-10 1.txt
cut -c5- 1.txt #从第5个字符开始截取后面所有字符
3. tr 字符转换:替换,删除
tr用来从标准输入中通过替换或删除操作进行字符转换;主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换
语法:
- -d 删除字符串1中所有输入字符。
- -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
- a-z 任意小写
- A-Z 任意大写
- 0-9 任意数字
tr -d '[:/]' < 3.txt #删除文件中的:和/
cat 1.txt |tr -d '[:/]' #删除文件中的:和/
tr '[0-9]' '@' < 3.txt #将文件中的数字替换为@符号
tr '[a-z]' '[A-Z]' < 3.txt #将文件中的小写字母替换成大写字母
tr -s '[a-z]' < 3.txt # 匹配小写字母并将重复的压缩为一个
tr -s '[a-z0-9]' < 3.txt #匹配小写字母和数字并将重复的压缩为一个
4.sort排序
sort:将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法:
sort [options] [filename]
- -u :去除重复行
- -r :降序排列,默认是升序
- -o : 将排序结果输出到文件中 类似 重定向符号 >
- -n :以数字排序,默认是按字符排序
- -t :分隔符
- -k :第N列
- -b :忽略前导空格。
- -R :随机排序,每次运行的结果均不同。
sort -n -t: -k3 1.txt #按照用户的uid进行升序排列
sort -nr -t: -k3 1.txt #按照用户的uid进行降序排列
sort -n 2.txt #按照数字排序
sort -nu 2.txt #按照数字排序并且去重
sort -nr 2.txt
sort -nru 2.txt
sort -nru 2.txt
sort -n 2.txt -o 3.txt #按照数字排序并将结果重定向到文件
sort -R 2.txt
sort -u 2.txt
5.uniq 去除连续的重复行
应用技巧:去重前先使用sort排序
语法:
uniq [options] [filename]
- -i: 忽略大小写
- -c: 统计重复行次数
- -d:只显示重复行
uniq 2.txt
uniq -d 2.txt
uniq -dc 2.txt
6. tee 双向输出
tee工具从标准输入读取并写入标准输出和文件,即:双向覆盖重定向<屏幕输出|文本输入>
somecommand |tee filename
- -a 双向追加重定向
echo hello world
echo hello world|tee file1
cat file1
echo 999|tee -a file1
cat file1
7. paste
paste工具用于合并文件行输出到屏幕,不会改动源文件
- -d:自定义间隔符,默认是tab,只接受一个字符
- -s:将每个文件中的所有内容按照一行输出,文件中的行与行以TAB间隔。
[root@zutuanxue shell01]# cat a.txt
hello
[root@zutuanxue shell01]# cat b.txt
hello world
888
999
[root@zutuanxue shell01]# paste a.txt b.txt
hello hello world
888
999
[root@zutuanxue shell01]# paste b.txt a.txt
hello world hello
888
999
[root@zutuanxue shell01]# paste -d'@' b.txt a.txt
hello world@hello
888@
999@
[root@zutuanxue shell01]# paste -s b.txt a.txt
hello world 888 999
hello
8.xargs 上一个命令的输出作为下一个命令的命令行参数
OPTIONS:
- -a file 从文件中读入作为sdtin
- -E flag flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
- -p 当每次执行一个argument的时候询问一次用户。
- -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
- -t 表示先打印命令,然后再执行。
- -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
- -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
- -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
[root@localhost ~]# cat 2.txt
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# xargs -a 2.txt
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# xargs -a 2.txt -p
echo 1 2 3 4 5 6 7 8 9 10 ?...y
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# xargs -a 2.txt -n3
1 2 3
4 5 6
7 8 9
10
[root@localhost ~]# xargs -a 2.txt -E5
1 2 3 4
[root@localhost ~]# xargs -a 2.txt -d '@'
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#
标签:sort,xargs,Shell,grep,常用命令,匹配,txt,root
From: https://www.cnblogs.com/itwangxl/p/17414918.html