锋利的Bash(4):三剑客(相识)

一道残阳铺水中,半江瑟瑟半江红。

Bash

环境变量与自定义变量

env查看环境变量,set查看所有变量。两者的区别关键在于是否会被子进程所继续引用,可以使用export将自定义变量转化为环境变量。可以把这两个理解为global变量和local变量。这里注意子进程与父进程的关系。

declaretypeset用于声明变量,在iie工作记录中的脚本中我用到了bash数组,BashNote(3)中也用详细的总结,这里说说declare的另外几个功能。-i声明整形变量,-x等价于export的功能,导出环境变量,-r将变量设置为只读。

使用source或者小数点直接读取配置文件不需要注销再登录。

自定义变量的设置,参考BashNote(1)

历史命令

history是一个很简单的命令。!!执行上一条命令。HISTSIZE环境变量设置保存多少条历史,默认历史命令在注销后保存至~/.bash_history

bash配置文件

/etc/profile所有用户都会执行。
/etc/profile.d/*.sh最好自定义的内容在这里面修改,只要用户具有读权限,该文件就会被调用。
~/.bash_profile个人配置文件,如果该文件不存在就回去读取.bash_login,如果还不存在就读取~/.profile

命令

参考《鸟哥的linux私房菜》,这里需要掌握的命令有:选取命令cutgrep,排序命令sortwcuniqshuf,双向重定向tee,字符转换trcoljoinpasteexpand,参数代换xargs

常用参数

cut

参考:BashNote(3)

sort

shuf可以混洗输出。
-f : 忽略大小写
-b : 忽略行首空格
-M : 以月份进行排序
-n : 使用纯数字进行排序
-r : 反向输出
-u : uniq
-t : 分隔符
-k : 指定区间作为排序键

uniq

-i : 忽略大小写
-c : 进行计数

tee

-a : 追加写

tr

可以认为是缩水版本的sed。
参考:BashNote(2)

join

需要预先将文件排序。
-i : 忽略大小写
-1 : 第一个文件的键所在字段, 从1开始
-2 : 第二个文件的键所在字段

paste

类似于join,不过是以行号作为键

expand

将制表符转化为空格。另外unexpand可以做到相反的事情、
-t : 一个tab转化为几个空格。

xargs

将换行符、tab或者空格替换为参数格式。

使用实例:

不定个数空格分割的字段的处理,使用tr

1
echo -e "asd  asd asd   asd\tasd\nasd asd" |  tr -s " "

按照数字键进行排序,使用sort。一定要有-n。

1
cat /etc/passwd | sort -t ':' -k 3 -n

将历史命令按照使用频率排序,只输出十次以上的命令。uniq之前一定要先sort,因为uniq仅仅只处理连续的重复行。-E使得括号大括号等具有特殊含义,具体内容使用man手册。

1
history | cut -d " " -f 4 | sort | uniq -c | sort -n | grep -E "^[[:space:]]*[[:digit:]]{2,}"

文本处理三剑客

常用参数

grep

-a : 以文本方式处理二进制文件
-c : 匹配的行数
-i : 忽略大小写
-n : 输出行号
-v : 反向选择
-A : 顺便输出前n行
-B : 顺便输出后n行

sed

参数:
-n : 只有被处理行进行输出
-e : 命令行模式
-f : sed脚本
-r : 使用扩展正则表达式
-i : 直接在原文件修改

操作:
a : 当前的下一行插入
i : 当前的上一行插入
c : 行替换,将指定行替换为新的内容
d : 删除
p : 打印(通常需要-n)
s : 正则替换

扩展:
三十分钟学会 sed
SED 与 AWK 笔记
Linux/Unix工具与正则表达式的POSIX规范

awk

相比sed擅长证行进行处理,awk擅长将一行拆分为字段。

参考

《鸟哥的Linux私房菜——基础篇》

本站总访问量