sed,awk使用小记
awk 默认是用空格作为分隔符,后面的大括号需要用单引号引起来,不能用双引号,否则就得不到想要的结果,如果要指定分隔符,使用 -F 分隔符。例如从文本-rw-r–r– 1 root root 165 Aug 25 12:51 runAll.sh中获取165,可以使用命令:echo “-rw-r–r– 1 root root 165 Aug 25 12:51 runAll.sh” | awk -F” ” ‘{print $5}’,其中 awk -F” ” ‘可以省略.。
sed -e patt 中的patt需要用引号引起来,单引号双引号都行。sed能很方便的将文本中指定字符串替换成另外的字符串,配合其他的命令可以一次性把一个目录下所有文件进行替换操作。例如把文本 “start zhou yang end”替换成“start yang zhou end”, 即把yang前面的一个单词和与yang换位置,可以使用命令:
echo "start zhou yang end" | sed -e 's/ \(.*\) \(yang\)/ \2 \1/g'
。命令:
grep "114.87.189.33" * -R | awk -F: '{print $1}' |sort |uniq | xargs sed -i "s/114.87.189.33/214.187.189.33/g"
则会把当前目录下所有文件的114.87.189.33替换成214.187.189.33。注意sed的patt里很多符号需要转义的,比喻()等,g表示替换全部。
关于sed,awk的用户可以参看 linux下监控网卡流量的shell脚本 中的用法。
另外在shell中把命令的输出结果存放在一个变量可以用以下两种方式
1,$var = `cmd`
2, $var = $(cmd)