~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
linux下取前N个字符的方法:
1.) head -c 3 <<<$var
2.) cut -c 3-8,9-
3.) str=abcdefg
echo ${str:0:3}
4.) for i in `cat file`; do echo ${i:0:3};done
5.) echo abcdef |awk -F '' '{OFS="";print $1,$2,$3}'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
awk的一些用法
awk -F'/' '{print $NF}' xxx.txt //NF是域的个数,$NF是输出最后一个域的内容
awk '/^$/ {print FNR}' xxx //打印所有空行的行号
# echo "[123][456][789]"|awk -F"[][]" 'NF=NF'
123 456 789
# echo "[123][456][789]"|awk -F"[][]" 'NF+=0'
123 456 789
$ awk 'BEGIN{FS=":"; OFS=" "; ORS="\n"} {print $1} END{print NR}' passwd
root
bin
daemon
adm
lp
5
BEGIN和END中的代码快分别在匹配文件之前和之后执行,FS,OFS,ORS,NR都是awk的内建变量
上例的意思是将分割符设为:,输出分割符为空格,换行符为行之间的分隔符,NR代表匹配的行数
$ awk -F ":" '$3==0 {print $0 > "root.txt" }' passwd
使用重定向将结果输出到root.txt中
$ awk -F ":" '{if($3==0){print "yes"} else {print "no"}}' passwd
yes
no
no
no
no
awk中的条件判断语句
if(expr){statment;}else{statment;}

$ awk -F ":" '{gsub(/root/, "david"); print}' passwd
david:x:0:0:david:/david:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
使用awk的内建函数,将root替换为david

$ awk -F ":" '$1~/root/{for (i=1; i < NF; i++) print i,$i}' passwd
1 root
2 x
3 0
4 0
5 root
6 /root
for循环语句
awk -F ":" '$1~/root/{i=1;while(i < NF){print i,$i;i++}}' passwd
使用while打印出与上面的for语句一样的结果

$ echo 22 33 44 55 66|sed 's/ /\x27,\x27/g'
22','33','44','55','66
$ echo 22 33 44 55 66|sed "s/ /','/g"
22','33','44','55','66
注释:sed 的替换中,对单引号的两种处理方式。\x27代表单引号,或者sed替换中的单引号使用双引号来代替。

$ echo = |sed 's#=#\\\=#'
\=
$ echo "'>"|sed "s/'>/\\\'>/"
\'>
$ echo ".>"|sed 's/.>/\\\.>/'
\.>
$ echo "\n"|sed 's/\\n/\\\\n/'
\\n
注释:sed替换中对\的处理的例子。反斜杠用两个\\注释
 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sed的一些用法:
# echo "[123][456][789]"|sed 's/[][]/ /g'
123 456 789
# echo "abcdefg" | sed 's/[cf]/AA/g'
abAAdeAAg
注释:表示把[]内的c和f都换成AA字符.上一个表示[]内的]和[都换成空格


本文某些例子参考来源:
http://bbs.linuxtone.org/thread-224-1-1.html
http://bbs.linuxtone.org/thread-227-1-1.html