LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: xiachongbaogc

仅用shell 能否读取文件中的第一个数

[复制链接]
发表于 2009-8-7 04:06:18 | 显示全部楼层
Post by xiachongbaogc;2013283
[xia@localhost ~]$ cat kk
29241 pts/2     00:00:00  bash
29362 pts/2     00:00:00  ps
[xia@localhost ~]$ head -1 kk | cut -d' ' -f1
29241
测试OK. 而且修改 -f1  to  -f2
[xia@localhost ~]$ head -1 kk |cut -d' ' -f2
pts/2

[xia@localhost ~]$ head -1 kk |cut -d' ' -f3

没有想象的显示“00:00:00”,是因为 “pts/2” 后空格太多了。 该怎么解决?

是因为空格太多,一个空格算一个filed.
如果空格数固定,容易解决。如果不固定,就只好用类似 ${var##}, ${var%%} 掐头去尾来解决了。
回复 支持 反对

使用道具 举报

发表于 2009-8-7 04:10:56 | 显示全部楼层
Post by xiachongbaogc;2013278
兄弟还能解释下。


从右相左匹配到最后一个空格,返回不匹配的部分。
man bash, search 'Parameter Expansion'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-7 17:11:03 | 显示全部楼层
谢谢。明白了
回复 支持 反对

使用道具 举报

发表于 2009-8-15 14:57:01 | 显示全部楼层
Post by edz;2012087
a=${a%%\ *}


bash中类似的功能不错,只是觉得不好记。
回复 支持 反对

使用道具 举报

发表于 2009-8-15 21:50:24 | 显示全部楼层
Post by skycleaner;2016558
bash中类似的功能不错,只是觉得不好记。

我觉得很好记忆。
取变量的值,前面加“$”符号,而键盘上的“#”在“$”左边,所以“#”是去最短前缀,“##”是去最长前缀;取后缀类似,只不过“%”在“$”右边...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表