Linux Shell脚本攻略笔记2之命令之乐
2016-06-14 00:08
399 查看
cat
文件拼接
cat 1.txt 2.txt
摆脱多余空白行
$ cat -s ss.tst
或者tr $ cat ss.tst |tr -s '\n'
显示行号 -n
$ cat -n ss.tst
录屏
$ script -t 2> timing.log -a output.session
exit结束
回放
$ scriptreplay timing.log output.session
xargs
单行->多行;多行->单行
stu2452@ubuntu:~/shell$ cat examle.txt
1
2 3 4 5
6
7
8 9
$ cat examle.txt | xargs
1 2 3 4 5 6 7 8 9
$ cat examle.txt | xargs -n3
1 2 3
4 5 6
7 8 9
指定分隔符 -d
$ echo "spamXspamXspamXspamXspam"|xargs -d X -n2
spam spam
spam spam
spam
xargs实现循环
$ ls "*.txt" | xargs -n1 -i{} mv {} {}.bak
结合find使用
$ find . -type f -name "*.bak" -print0 | xargs -0 rm -f
注:find的输出做xarg输入必须将-print0 与find结合使用,以字符null('\0')来分割输出
统计c 源码中有多少行
$ find . -type f -name "*.c" -print0 | xargs -0 wc -l
34 ./jsq.c
26 ./hws.c
24 ./1.c
29 ./wwwww.c
29 ./huiwenshu.c
142 total
find
-atime 访问时间
-mtime 内容修改时间
-ctime 元数据(权限,属主)改变
-7 7天内 -amin
7 7天前 -mmin
+7 超过7天 -cmin
比file1 修改时间更近
$ find . -type f -newer file1 -print
基于文件大小
$ find . -type f -size +2k
基于权限
$ find . -type f -perm 644
删除匹配文件
$ find . -type f -perm 644 -delete
结合 -exec
$ find . -type f -user root -exec chown dog {} \;
$ find . -type f -name "*.c" -exec cat {} \; > c_file.txt
tr
大写转小写
#echo "HELLO WORLD" | tr 'A-Z' 'a-z'
加密,解密
$ echo "I am a student,Do you want to make friend with me?" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
V nz n fghqrag,Qb lbh jnag gb znxr sevraq jvgu zr?
$ echo "V nz n fghqrag,Qb lbh jnag gb znxr sevraq jvgu zr?" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
I am a student,Do you want to make friend with me?
制表符转空格
$ tr '\t' ' '
删除字符
$ cat 1_1.sh |tr -d 'echo'
压缩字符 -s
$ echo "GUn is not a linux." | tr -s ' '
GUn is not a linux.
擦除多余空格符
$ cat sum.txt | tr -s '\n'
字符类
[:alnum:] :字母数字
[:alpha:] :字母
[:blank:] : all horizontal whitespace
[:cntrl:] :控制(非打印)字符
[:digit:] :数字
[:graph:] :图形字符
[:lower:] :小写
[:print:] :可打印字符
[:punct:] :标点符号
[:space:] :空白字符
[:upper:] :大写
[:xdigit:] :16进制字符
[=CHAR=]: all characters which are equivalent to CHAR
$ echo "hello world" | tr '[:lower:]' '[:upper:]'
HELLO WORLD
校验与核实md5sum
$ md5sum 1.c > 1.c.md5
$ md5sum -c 1.c.md5
1.c: OK 没改变
对目录进行校验
$ md5deep -rl python ./python > dir_md5.txt
-r 使用递归方式
-l 使用相对路径,默认绝对路径
结合-exec 使用
$ find . type f -print0 | xargs -0 md5sum >> dir.txt
$ md5sum -c dir_md5.txt
sort
按数字排序输出到文件
$ sort -n 1.txt 2.txt -o sorted.txt
-r 逆序
-M 按月份
-m 合并两个已经排序的文件
$ sort 1.txt 2.txt |uniq 排序不重行
-C 检查文件是否排序 echo $? 查看结果
-k 指定哪个键排序
$ sort -nrk 3 3.txt 按第三列按数字逆序
uniq
-c 统计重复行数目
-d 找出重复行
临时文件命名与随机数
$ mktemp 创建临时文件
/tmp/tmp.FMbpewYwO5
$ mktemp -d 创建临时目录
/tmp/tmp.NC9FLSWhTM
$ mktemp -u 不创建文件,只取名字
/tmp/tmp.Cbf2Yy4DUu
$ mktemp test.XXX 根据模板创建文件名
test.7Hv
分割文件split
$ split -b 10k date.file 按字节
$ split -l 10 date.file 按行数,10行
$ split -b 10k date.file -d -a 4 split_file
split_file0001 split_file0002 ...
$ csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log
根据拓展文件名切分文件
$ VAR=www.dlmu.edu.cn
$ echo ${VAR}
www.dlmu.edu.cn
$ echo ${VAR%.*}
www.dlmu.edu
$ echo ${VAR%%.*}
www
$ echo ${VAR#*.}
dlmu.edu.cn
$ echo ${VAR##*.}
cn
rename
将文件名小写便大写
$ rename 'y/a-z/A-Z/' *
把MP3文件移到MP3目录
find -type f -name "*.mp3" -exec mv {} mp3/ \;
把所有文件空格换为字符'_'
$ find . -type f -exec rename 's/ /_/g' {} \;
look android 查字典是否拼写错误
利用并行进程加速执行
#!/bin/bash
PIDARRAY=()
for file in 1.sh 2.sh 1_1.sh 2_1.sh 6.sh
do
md5sum $file &
PIDARRAY+=("$!")
done
wait ${PAIARRAY[@]}
文件拼接
cat 1.txt 2.txt
摆脱多余空白行
$ cat -s ss.tst
或者tr $ cat ss.tst |tr -s '\n'
显示行号 -n
$ cat -n ss.tst
录屏
$ script -t 2> timing.log -a output.session
exit结束
回放
$ scriptreplay timing.log output.session
xargs
单行->多行;多行->单行
stu2452@ubuntu:~/shell$ cat examle.txt
1
2 3 4 5
6
7
8 9
$ cat examle.txt | xargs
1 2 3 4 5 6 7 8 9
$ cat examle.txt | xargs -n3
1 2 3
4 5 6
7 8 9
指定分隔符 -d
$ echo "spamXspamXspamXspamXspam"|xargs -d X -n2
spam spam
spam spam
spam
xargs实现循环
$ ls "*.txt" | xargs -n1 -i{} mv {} {}.bak
结合find使用
$ find . -type f -name "*.bak" -print0 | xargs -0 rm -f
注:find的输出做xarg输入必须将-print0 与find结合使用,以字符null('\0')来分割输出
统计c 源码中有多少行
$ find . -type f -name "*.c" -print0 | xargs -0 wc -l
34 ./jsq.c
26 ./hws.c
24 ./1.c
29 ./wwwww.c
29 ./huiwenshu.c
142 total
find
-atime 访问时间
-mtime 内容修改时间
-ctime 元数据(权限,属主)改变
-7 7天内 -amin
7 7天前 -mmin
+7 超过7天 -cmin
比file1 修改时间更近
$ find . -type f -newer file1 -print
基于文件大小
$ find . -type f -size +2k
基于权限
$ find . -type f -perm 644
删除匹配文件
$ find . -type f -perm 644 -delete
结合 -exec
$ find . -type f -user root -exec chown dog {} \;
$ find . -type f -name "*.c" -exec cat {} \; > c_file.txt
tr
大写转小写
#echo "HELLO WORLD" | tr 'A-Z' 'a-z'
加密,解密
$ echo "I am a student,Do you want to make friend with me?" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
V nz n fghqrag,Qb lbh jnag gb znxr sevraq jvgu zr?
$ echo "V nz n fghqrag,Qb lbh jnag gb znxr sevraq jvgu zr?" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
I am a student,Do you want to make friend with me?
制表符转空格
$ tr '\t' ' '
删除字符
$ cat 1_1.sh |tr -d 'echo'
压缩字符 -s
$ echo "GUn is not a linux." | tr -s ' '
GUn is not a linux.
擦除多余空格符
$ cat sum.txt | tr -s '\n'
字符类
[:alnum:] :字母数字
[:alpha:] :字母
[:blank:] : all horizontal whitespace
[:cntrl:] :控制(非打印)字符
[:digit:] :数字
[:graph:] :图形字符
[:lower:] :小写
[:print:] :可打印字符
[:punct:] :标点符号
[:space:] :空白字符
[:upper:] :大写
[:xdigit:] :16进制字符
[=CHAR=]: all characters which are equivalent to CHAR
$ echo "hello world" | tr '[:lower:]' '[:upper:]'
HELLO WORLD
校验与核实md5sum
$ md5sum 1.c > 1.c.md5
$ md5sum -c 1.c.md5
1.c: OK 没改变
对目录进行校验
$ md5deep -rl python ./python > dir_md5.txt
-r 使用递归方式
-l 使用相对路径,默认绝对路径
结合-exec 使用
$ find . type f -print0 | xargs -0 md5sum >> dir.txt
$ md5sum -c dir_md5.txt
sort
按数字排序输出到文件
$ sort -n 1.txt 2.txt -o sorted.txt
-r 逆序
-M 按月份
-m 合并两个已经排序的文件
$ sort 1.txt 2.txt |uniq 排序不重行
-C 检查文件是否排序 echo $? 查看结果
-k 指定哪个键排序
$ sort -nrk 3 3.txt 按第三列按数字逆序
uniq
-c 统计重复行数目
-d 找出重复行
临时文件命名与随机数
$ mktemp 创建临时文件
/tmp/tmp.FMbpewYwO5
$ mktemp -d 创建临时目录
/tmp/tmp.NC9FLSWhTM
$ mktemp -u 不创建文件,只取名字
/tmp/tmp.Cbf2Yy4DUu
$ mktemp test.XXX 根据模板创建文件名
test.7Hv
分割文件split
$ split -b 10k date.file 按字节
$ split -l 10 date.file 按行数,10行
$ split -b 10k date.file -d -a 4 split_file
split_file0001 split_file0002 ...
$ csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log
根据拓展文件名切分文件
$ VAR=www.dlmu.edu.cn
$ echo ${VAR}
www.dlmu.edu.cn
$ echo ${VAR%.*}
www.dlmu.edu
$ echo ${VAR%%.*}
www
$ echo ${VAR#*.}
dlmu.edu.cn
$ echo ${VAR##*.}
cn
rename
将文件名小写便大写
$ rename 'y/a-z/A-Z/' *
把MP3文件移到MP3目录
find -type f -name "*.mp3" -exec mv {} mp3/ \;
把所有文件空格换为字符'_'
$ find . -type f -exec rename 's/ /_/g' {} \;
look android 查字典是否拼写错误
利用并行进程加速执行
#!/bin/bash
PIDARRAY=()
for file in 1.sh 2.sh 1_1.sh 2_1.sh 6.sh
do
md5sum $file &
PIDARRAY+=("$!")
done
wait ${PAIARRAY[@]}
相关文章推荐
- Linux Shell脚本攻略笔记1之牛刀小试
- shell编程和正则表达式相关知识
- Python下调用Linux的Shell命令
- 递归复制文件
- git shell 推送到github网站
- shell脚本相关问题
- shell脚本下的双 [ [ ] ]和单[ ]的联系和区别
- Shell语法学习篇
- SSH Secure Shell Client中文乱码的解决方法
- shell脚本知识
- linux Shell中read的选项及用法
- [Shell学习笔记] 创建任意大小的文件And分割任意大小的文件
- ssh secure shell登录 linux系统
- shell cut 用法
- sys.argv的使用方法
- 修改Xshell字体大小和颜色
- shell脚本 实现在git下两个提交下文件差异并打包
- Xshell5中文破解版
- 让XShell保存日志教程
- adb shell 调试 Android 串口