目录
匹配多个tab
将一个或多个tab符号替换为一个空白。方法1:
$ sed 's/\t+/ /g' file
方法2:
$ awk '{gsub(/\t+/, " "); print}' test
获取文件最后一行的最后一列,分隔最后一列的空格数量未知。
文件如下,希望获得最后一个数字:3
cat test.dat
A.B.C.D.E.A.B.C.D.E A.B.C.D.E.A.B.C.D.E A.B.C.D.E.A.B.C.D.E COUNT 3
方法1:
$ tail -1 test.dat | cut -d' ' -f2- | tr -d ' '
方法2:
$ awk 'NF>1 {a=$NF}END{print a}' test.dat
Shell的Chr() 函数
Chr(10进制数)
$ echo 65 | awk '{printf "%c\n", $0}'
A
Chr(16进制数)
echo '0x41' | awk '{printf "%c\n", strtonum($0)}'
A
Shell的Asc()函数
$ echo A | od -td1 | sed -r 's/[\t ]+/ /g' | awk 'NF>1{print $2}'
65
$ echo A | od -tx1 | sed -r 's/[\t ]+/ /g' | awk 'NF>1{print $2}'
41
将10进制数转换成16进制数
$ echo 10 |awk '{printf "%x", $0)}'
a
希望有前缀0x
$ echo 10 |awk '{printf "%#x", $0}'
0xa
希望不足2位前面补零
$ echo 10 |awk '{printf "%#.2x", $0}'
0x0a
awk 在正则表达式中引用一个变量
awk 中,通常我们使用2个slash "/.../" 将正则表达式wrap 起来,比如下面的awk 命令将文件中每一行开头的"str"替换为"newStr":
$ awk '{sub(/^str/, "newStr"); print}' file
但如果"str" 是一个awk变量或者是一个函数的返回值,那么需要进行如下修改才能工作:将"/.../"替换成双引号,并使变量在双引号之外。如下:
$ awk '{sub("^"$NF, "newStr"); print}' file
或者:
$ awk '{reg = "^"$NF; sub(reg, "newStr"); print}' file
以上$NF是awk的内部变量,代表当前行最后一列的值,可以替换成其它awk 变量或者有返回值的函数。如果需要,变量后面可以继续添加用双引号引起的正则表达式。
- 文章信息
- 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
- 原文出处: http://www.aiview.com/
- 写于: 2006-02-21 [Edit]
- 作者: Alex (email &msn)

- 标签 Tags: Shell (8), 学习笔记 (14)


