管道符的使用
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1826 1244 582 9
[root@linuxprobe ~]# free -m | grep Mem: | awk ‘{print $4}’
582
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk ‘{print $4}’
[root@linuxprobe ~]# echo $FreeMem
582
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
sed 中替换字符串
sed ‘s/原字符串/替换字符串/’ filename
sed ‘2s/原字符串/替换字符串/’
替换第二行
sed ‘
s
/
原
字
符
串
/
替
换
字
符
串
/
′
替
换
最
后
一
行
若
添
加
了
g
,
代
表
替
换
文
本
中
出
现
的
所
有
匹
配
字
符
串
,
否
则
只
替
换
第
一
次
出
现
的
s
e
d
中
替
换
变
量
.
e
v
a
l
s
e
d
′
s
/
s/原字符串/替换字符串/' 替换最后一行 若添加了g,代表替换文本中出现的所有匹配字符串,否则只替换第一次出现的 sed 中替换变量 . eval sed 's/
s/原字符串/替换字符串/′替换最后一行若添加了g,代表替换文本中出现的所有匹配字符串,否则只替换第一次出现的sed中替换变量.evalsed′s/a/
b
/
′
f
i
l
e
n
a
m
e
.
s
e
d
"
s
/
b/' filename . sed "s/
b/′filename.sed"s/a/
b
/
"
f
i
l
e
n
a
m
e
.
.
s
e
d
′
s
/
′
b/" filename . .sed 's/'
b/"filename..sed′s/′a’/'
b
′
/
′
f
i
l
e
n
a
m
e
.
.
s
e
d
s
/
b'/' filename . .sed s/
b′/′filename..seds/a/$b/ filename
自己用到的是第二种
sed -i "2s/$pronum/$comnum/" complex.gro
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
pronum=`sed -n '2p' $protein.gro`
或者是
pronum=$(sed -n '2p' complex.gro)
将第二行的内容赋值给pronum变量
这里` 是Esc下面的那个字符,一定要注意
sed 中在匹配的变量后面添加多行,并且有转义字符,用到反斜杠
sed -i -e "$hang a \; Include ligand topology\n#include \"$ligname.itp\" " topol.top
shell 中变量相加,shell 中所有变量默认为字符串,所以变量相加需要
comnum=`expr $lignum + $pronum`
或者用(())
grep 命令
Linux grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
grep “被查找的字符串” 文件名
-n 显示行号
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
grep -n "CONECT" -B 1 $ligname.pdb | head -1 > lignum.txt
显示CONECT匹配行及它之前的一行内容,管道符代表只显示第一行,并存到lignum.txt
linux awk命令
awk是三个创始人的首字符
把lignum中第二列的数字赋值给lignum
lignum=$(awk '{print $2}' lignum.txt)
hang=$(grep -n "endif" topol.top | head -1 | awk -F: '{print $1}')
三个命令混合起来的一个用法
ps aux | grep sbin | awk '{print $2}' | sed -n '1,3p'
匹配sbin 第二列并且是1到3行的