cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自动化交互

1. cat的用法

压缩连续的空白行

cat -s file

也可以用tr,将连续'\n',压缩成一个'\n'

cat file | tr -s '\n'

显示制表符

cat -T file

显示行号

cat -n file

2. script命令

录制: script -t 2> time.log out.session

type commands;

exit退出录制

回放: scriptreplay time.log out.session

记录日志: script -aq out -c "pwd"

可以将-c里面执行命令的结果保存到out文件,达到记录日志的目的

3. find命令

多条件组合

注意括号需要转义,后面必须有空格

查找shell还有python文件

目录深度

find . -mindepth 2 -type f

find . -maxdepth 1 -type d

文件类型

find . -type d  # d表示目录,f表示文件,l表示链接

文件时间,linux中没有文件创建时间概念

-atime,用户最近一次访问文件的时间; -mtime,文件内容最后一次被修改的时间; -ctime,文件元数据(metadata,例如权限或所有权)最后一次改变的时间

其中-表示小于,+表示大于

查找七天内被访问过的文件: find . -type f -atime -7; 恰好在七天前被访问的文件: find . -type f -atime 7; 超过七天被访问的文件: find -type f -atime +7

相似的有amin,mmin,cmin,以分钟为单位

文件大小

-size ( b,块 512字节; c,字节; w,字 2字节; k, 千字节; M,兆字节; G )

其中-表示小于,+表示大于

删除文件 -delete

删除当前目录下所有.swp文件: find . -type f -name "*.swp" -delete

所有权或用户查找

find . -type f -perm 644

find . -type f -user sryan

结合find执行命令,-exec

将当前目录下用户为root的文件改为sryan

find . -type f -user root -exec chown sryan {} \;

{}是find搜寻的结果,\转义分号,不让shell解释,意思该分号是给-exec使用

-exec只能接受单个命令,所以如果有多个命令,可以写成脚本,-exec ./comand.sh {} \;

find命令全部输出只是一个单数据流(stdin),只有当多个数据流被追加到文件时,才有必要用用>>

find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt  #将当前目录下所有c程序文件拼接起来写入文件

find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; #将大于10天的txt文件移动到OLD目录下

修剪,跳过指定目录

find dev/folder \( -name ".git" -prune \) -o \( -type f -print \) # 排除.git目录,打印所有文件的名称和路径

只查看目录下非隐藏的文件, 试了下,如果不加-o选项,则-prune不会起作用

4. xargs

有些命令无法接收stdin数据流,xargs能够将标准输入数据先格式化,转换成命令行参数

将多行转换成单行输出, xargs默认是按照“ ”空格来格式化的

-n 指定每行最大参数数量

-d 指定定界符,注意是区分大小写的

-I 选项指定一个替换字符串

cat args.txt | xargs -I {} ./test.sh -p {} -l

相当于 .test.sh -p arg1 -l

test.sh -p arg2 -l

与 -i 的区别

与find的结合

误区: find . -type f -name "*.txt" -print | xargs rm -f

无法预测find输出结果的定界符究竟是'\n'还是空格' ',很多文件名中含有空格

误删了hell文件,但是hell test.txt没删掉,因为xargs是以空格为定界符的

find . -type f -name "*.txt" -print0 | xargs -0 rm -f

xargs -0 将\0作为指定的定界符

统计每个txt文件的行数

5. tr

对来自标准输入的字符进行替换,删除以及压缩。无法通过命令行参数接收输入

tr后面的两个参数需要等长,如果前面短,则截断后面;如果前面长,则后面的用最后一个字符补齐

-d 删除

-s 压缩,可以用来去除多余空格

$[ ] 是执行算术运算

字符类替换

alnum: 字母和数字;   alpha: 字母;    cntrl: 控制字符

digit: 数字;   graph: 图形字符;  lower: 小写

upper: 大写;    print: 可打印字符;   punct: 标点符号

space: 空白字符;   xdigit: 十六进制

6. 产生tmp文件

或者使用$RANDOM

或者temp_file=/tmp/var.$$,在脚本中,$$会被扩展成当前运行脚本的进程id

7. 生产固定大小的文件

dd if=/dev/zero bs=100k count=1 of=data.file

生成大小为100kb而文件内容全部是0

8. 字符串截取

${var%.*},删除位于%右侧的通配符(.*)所匹配的字符串,通配符从右向左匹配

贪婪模式

${var#.*},删除位于#左侧通配符(.*)所匹配的字符串,通配符从左向右匹配

9. 批量文件重命名

rename 'y/A-Z/a-z/' *  #大写替换成小写,*匹配所有文件

find . -type f -exec rename 's/ /_/g' {} \;   #将所有文件里的空格替换成_

10. 自动化交互

#!/bin/expect

spawn kinit sryan
expect "Password*"
send "Mypassword\n"
expect eof # interact

spawn: 启动你要自动化的的进程

expect:需要等待的信息

send: 要发送的信息

expect eof: 指明命令交互结束

interact: 将交互状态保留给控制台,例如ssh进入后,如果不加这句,就会退出,而不是留在远程服务器上

Linux Shell Scripting Cookbook 读书笔记 2的更多相关文章

  1. Linux Shell Scripting Cookbook 读书笔记 1

    本系列文章为<Linux Shell Scripting Cookbook>的读书笔记,只记录了我觉得工作中有用,而我还不是很熟练的命令 书是很好的书,有许多命令由于我比较熟悉,可能就没有 ...

  2. Linux Shell Scripting Cookbook 读书笔记 7

    ping, du, ps, kill, 收集系统信息 判断网络中哪些主机是活动主机 #!/bin/bash for ip in 10.215.70.{1..255}; do ( ping $ip -c ...

  3. Linux Shell Scripting Cookbook 读书笔记 6

    wget,curl, tar, rsync wget ftp://example.com/somefile.img -t 5 -O download.img -o log -t表示重试的次数 -O指定 ...

  4. Linux Shell Scripting Cookbook 读书笔记 5

    sed,awk 1. sed (string editor) 使用-i可以将结果运用于原文件 sed 's/text1/text2/' file > newfile mv newfile fil ...

  5. Linux Shell Scripting Cookbook 读书笔记 4

    正则, grep 1. 正则表达式  正则表达式  描述  示例 ^ 行起始标记  ^hell匹配以hell开头的行 $ 行尾标记  test$匹配以test结尾的行 . 匹配任意一个字符  hell ...

  6. Linux Shell Scripting Cookbook 读书笔记 3

    patch, tree, head ,tail 1. 创建不可修改文件 chattr +i file chattr -i file 移除不可修改属性 2. 能够启动闪存或硬盘的混合ISO isohyb ...

  7. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

  8. 《The Linux Command Line》 读书笔记01 基本命令介绍

    <The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...

  9. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

随机推荐

  1. Mybatis与Hibernate的对比

    Mybatis与Hibernate的对比 工作中,用了一段Hibernate与Mybatis,也在此简单的聊上几句,希望对大家有帮助. Mybatis与Hibernate不同,它不完全是一个ORM框架 ...

  2. I2C controller core之Bit controller(02)

    4 generate clock and control signals 1 -- architecture signal iscl_oen, isda_oen : std_logic; -- int ...

  3. python 上手

    1.安装模块 cmd---“pip install [模块名]” 2.爬虫常用模块 requests beautifulsoup4 3.检查已安装的模块 cmd ---"pip list&q ...

  4. jQuery默认select选择第一个元素

    $("#id option:first").prop("selected", 'selected');

  5. WebLogic的服务搭建

    一.简介 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web ...

  6. TensorFlow的序列模型代码解释(RNN、LSTM)---笔记(16)

    1.学习单步的RNN:RNNCell.BasicRNNCell.BasicLSTMCell.LSTMCell.GRUCell (1)RNNCell 如果要学习TensorFlow中的RNN,第一站应该 ...

  7. WERTYU(WERTYU, UVa10082)

    把手放在键盘上时,稍不注意就会往右错一 位.这样,输入Q会变成输入W,输入J会变成输 入K等.键盘如图所示. 输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子.输入保 证合法, ...

  8. Noip 2013 练习

    转圈游戏 传送门 Solution 快速幂 Code //By Menteur_Hxy #include <cstdio> #include <cstdlib> #includ ...

  9. 2018 noip 考前临死挣扎

    基础算法 倍增 贪心 分块 二分 三分 数据结构 线段树 对顶堆 数学 质数 约数 同余 组合 矩阵乘法 图论 二分图判定以及最大匹配 字符串 Tire树 KMP 最小表示法 Hash Manache ...

  10. MDK(KEIL5)如何生成.bin文件 【转】

    最近要做个bin文件,网上找了好多都说的不够清楚,后来找到一篇实测可用,说明清楚的,转过来以便学习用. 参考传送门:https://blog.csdn.net/nx505j/article/detai ...