awk ~ 匹配符
在pattern部分进行字段匹配操作。文中包含bin的很多,但要找到以:分割后,第五个匹配bin的用户名,相当于用:将每行分割成数组,索引5值匹配,则将第一个打印出来
awk -F: '$5 ~ /bin/{print $1}' /etc/passwd
awk NR条件语句
在{}进行判断,如果是第二行,打印该行
判断第四个字段值大于500,打印一段话,否则打印一段话。注意语句块必须卸载花括号中
awk -F: '{if($4>500){print $1 "is high"} else {print $1 "is low"}}' /etc/passwd
awk for循环
对每一行的每一列,进行打印
sed 追加
-i 表示编辑,否则控制台打印,不写入文件
a 表示追加,后面跟反斜杠\
比如在以How开始的段后追加 i am a student
执行 sed -i '/^How*/a\ i am a student' 文件,前面四个空格符合python语法
sed 获取[] 之间的内容
[xyz]
是任何x,y,或z的字符。
[^xyz]
是相反的,即不是x,y,或z的任何字符。
sed '{s/[^[]*\[//;s/[]].*//}' 使用两次s/**/**/, {s/[^[]*\[//表示将任何非[ 0个或多个和[ 即12[移除掉,s/[]].*//表示将]和其后面的一个或多个字符移除,掐头去尾,从而获取[]中间的字符串
[^[].*\[ 匹配 12[caesar] ,从而获取第二个[]中内容
printf
格式化打印,printf 格式化格式 变量
%ns n为数字即空格数量,默认使用右对齐
%-ns n为数字即空格数量 ,-使用左对齐
在awk中 printf中,格式化格式和变量之间需要加上逗号
在awk循环打印中,for...in...对数组中元素忽略顺序,在for i++循环中,是按照顺序输出
单引号和双引号
' '关闭所有的meta,
“ ”关闭大多数meta,除了$ , ` ` , 对$和` `中的shell command执行,awk用{ }来区分命令段,在awk中如果直接使用{ },没有被shell关闭,会报错,shell中的$也关闭,也就是$需要成为awk的meta
$()和 ` `
相同点,都是对其中的shell command进行解释执行,` `会进行对此解释执行,$()只会进行一次解释执行,但是$()中可以使用` `,而 ` `中不能使用。
从shell的可读性角度,推荐使用$()
sort排序
sort排序,对文档中每行进行排序,默认使用字符的阿斯克码排序,使用-n 参数实现数字排序。
阿斯克码排序123在34前面,因为1在3前面。如下
-t 和-k 参数
-t 参数为分割符, -k 加某个列数,表示按照第某列进行排序。
默认使用第一列排序,在指定使用空格分割,以第二行进行排序后,结果见下,2可以带n参数,表示以数字排序,下面以第二列的阿斯克码排序。
cut 分割字符
-d delimiter 分割符
-f fileds 进行显示的列书,与awk相似,但awk更强大。
awk求一列值平均值
使用tr -s '\n'去除空行,对第一列的数字求平均值
cat source.txt |tr -s '\n' |awk '{sum +=$1}END{print sum/NR}'
对第二列的数字求平均值
在vim中格式化json字符串
在python 2.6以后,python提供json.tool可以方便地将json格式化。在vim中执行命令
vim打开json数据,命令行模式下
:%!python -m json.tool
%表示针对全部的行范围,
!调用linux命令,并将输出结果覆盖当前文本(注意!和执行的命令第一个字符中间不要有空格)
在vim中通过 ctrl+v 进行快编辑,使用 h+j+k+l 左下上右 进行操作,比如对代码添加#
a.选中一列 b. shift+i 插入 # c.Esc退出,即加上所有#
使用shift +v 进入行可视化编辑
使用y 复制,使用p进行黏贴
在vim中进入编辑状态
使用i 进入插入状态,但是习惯使用o 在该行下面添加一行,并进入插入状态,使用O在上边插入一行
I:在行首并插入状态
A: 在行末并插入状态
w : 一个单词一个单词向前跳,b: 一个单词一个单词向后跳
cw: change word,修改一个单词
cl: change line,修改一行,等同于使用cc: change the entire line
x 进行剪切,p 进行黏贴
y进行复制,p进行黏贴
:set shiftwidth=4 设置缩进长度为4,vim中默认是8. 设置后,在可视化下,使用shift > 和shift < 进行缩进。
ln and unlink
建立软连接,ln -s srcfile dstfile 对srcfile 文件或者文件夹建立软连接,dstfile可以自定义名称
移除软连接 unlink dstfile
从文件绝对路径获取文件名basename
time
date +%s 当前时间转化为秒数
date -s @秒数, 将秒数转化为时间