shell特殊符_cut命令
* 通配符表示任意个任意字符
? 表示任意一个字符
# 表示注释字符,后面的内容不生效
\ 脱义字符。取消它的原意。
| 管道符。前面命令的结果传递给后面的命令。
cut
cut 命令用来截取某一个字段
cut -d 指定分隔符
-f 指定段号
-c 指定第几个字符
cat /etc/passwd | head -2 |cut -c 2
cat /etc/passwd | head -2 |cut -d ":" -f 1,2 以冒号为分隔符截取第1段和第2段
cat /etc/passwd | head -2 |cut -d ":" -f 1-3 以冒号为分隔符截取1-3段
sort_wc_uniq命令
sort 命令:用做排序 如果不加任何选项,从首字符向后依次按ASCII码值进行排序。按升序输出
sort -n 表示用纯数字排序 ,特殊符号或者字母会按0排序
-r 表示反向排序
-t 指定分隔符
sort -n 1.txt 按数字排序 特殊字符和字母按0排序
sort -nr 1.txt 反向排序
wc 命令:用于统计文档的行数、字符数或词数
wc -l 统计行数 -m 统计字符数。包括换行符,可以使用cat -A来查看到 -w 统计词数 ,以空白字符作为分隔符
wc -l 2.txt 统计2.txt有几行
wc -m 2.txt 统计2.txt有几个字符 因为每行后面有换行符所以是12个
uniq命令 :用来删除重复的行 相邻的相同字符才能去重 一般跟sort排序后一起用
uniq -c 选项用来统计重复的行数
tee_tr_split命令
tee命令:作用类似于重定向 > 在重定向到文件里的同时还能打印显示在屏幕上 同时也
sort 2.txt |uniq -c | tee 1.txt 重定向到1.txt 文件中并且显示在屏幕中
-a 重定向追加选项 不会删除原有的内容
sort 2.txt |uniq -c | tee -a 1.txt 追加到1.txt中
tr命令:应用于替换字符,常用来处理文档中出现的特殊符号
echo "abcdef" | tr '[a,f]' '[A,F]' 替换a和f两个字母
echo "abcdef" | tr '[a-f]' '[A-F]‘ 替换a-z的所有字母
echo "abcdef" | tr '[a-z]' '1' 把字母都都换成1
split命令:切割文档,把一个很大的文件分成一定大小或一定行数的多个文件
-b 表示依据大小来分割文件,单位为Byte。
-l //表示依据行数来分割文件。
split -b 50k 2.txt abc. 切割成50k的文件并以abc.为文件开头
split -l 1000 2.txt 每1000行切割成一个文件
shell特殊符号
(1)$ 变量前缀 !$组合,在正则中表示行尾
(2);多条命令写入一行,用分号分割。
(3)~ 用户家目录,在正则表达式中表示匹配符
(4)& 放在命令后面,会把命令丢到后台
(5)> 正确重定向,会把之前文件的内容全部覆盖掉
>> 追加重定向 不会覆盖之前的内容,只会在文件后追加新内容
2> 错误重定向,只会写入错误的信息
2>> 错误追加重定向,不会覆盖之前的内容只会追加新内容
&> 把正确和错误的信息全部写入文件中
例如 : ll 1.txt aaa.txt &> 2.txt
(6)[ ]指定字符中的一个,[0-9],[a-zA-Z],[abc]
(7)|| 用在shell中表示或者的意思,当用在2条命令中间时,当第一条命令执行不成功时,才执行第2条命令。
&& 表示当第一条命令成功后,才会执行第2条命令。
练习
1. 设置环境变量 HISTSIZE , 使其能够保存10000条命令历史。
HISTSIZE=10000 永久修改 vi /etc/progile 更改HISTSIZE=10000
2. 为什么如果这样设置PS1 (PS1="[\u@\h \W]\$ ") 显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?
因为有$改成单引号
3. 想办法把当前目录下的文件的文件名中的小写字母全部替换为大写字母。
find ./ -type f |tr '[a-z]' '[A-Z]'
4. 使用sort以":"为分隔符,对/etc/passwd文件的第5段排序。
sort -t: -k5 /etc/passwd
5. 使用cut以":"为分隔符,截出/etc/passwd的第三段字符。
cut -d ":" -f3 /etc/passwd
6. 简述这几个文件的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.
/etc/profile, /etc/bashrc, 是系统文件对所有用户生效 .bashrc, .bash_profile. 用户家目录下的配置文件
7. export 的作用是什么?
生成全局变量
8. linux下自定义变量要符合什么样的规则呢?
可以数字字母和下划线组成 但开头不能个是字母
9. 如何把要运行的命令丢到后台跑?又如何把后台跑的进程给调到前台?
命令后加& fg回到任务
10. 列出当前目录下以"test"开头的文件和目录。
ls test*
11. 如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内?
ls 1.txt |tee 2.txt
12. 假如有个命令很长,我们如何使用一个简单的字符串代替这个复杂的命令呢?请举例说明。
alias li="ls -alh"
13. 我如何实现这样的功能,把一条命令丢到后台运行,而且把其正确输出和错误输出同时重定向到一个文件内?
top &>1.txt & 找不到了怎么关了啊
14. 如何按照大小(假如按照10M)分隔一个大文件,又如何按照行数(假如10000行)分隔?
spilt -b 10M 1.txt split -l 10000 1.txt
15. 做实验,搞明白 ; && || 这三个符号的含义。
ls 1.txt ; ls 2.txt
ls 111.txt || ls 2.txt 没有111.txt 才能查看2.txt
ls 1.txt && ls 2.txt 有1.txt才能查看2.txt
16. 如果只想让某个用户使用某个变量如何做?
在用户的 .bashrc 文件里设置变量
17. 使用哪个命令会把系统当中所有的变量以及当前用户定义的自定义变量列出来?
set :命令可以查看系统内置的变量 也可以查看用户自定义的变量