Chinaunix

标题: awk中使用 "||"作为分隔符好像不行 [打印本页]

作者: blacksabbather    时间: 2008-07-29 14:38
标题: awk中使用 "||"作为分隔符好像不行
大家好!
我创建了一个小文本文件(test.txt)内容如下:
aaa||bbb


现在使用awk -F "||" '{print $1}'  test.txt 打印结果:
aaa||bbb

貌似 "||" 不能作为分割符使用 我也加过 "\"试过 也不行,但其他如 "&&" "##"就可以,难道这是awk的bug?

多谢大家指点!
作者: merlin852    时间: 2008-07-29 14:42
[|][|]
作者: gucuiwen    时间: 2008-07-29 14:43
"|"是正则表达式的元字符(meta character)需要转意,用中挂号挂起来就行了:

# cat a
aaa||bbb||ccc
111||222||333

#cat a|awk 'BEGIN{FS="[|][|]"}{print $2,$3}'
bbb ccc
222 333
作者: gucuiwen    时间: 2008-07-29 14:44
2楼动作可真快啊,比偶快了1分钟。刚发完发现有人给回复了。
作者: jinl    时间: 2008-07-29 14:44
-F "[|]+"
作者: merlin852    时间: 2008-07-29 14:46
原帖由 gucuiwen 于 2008-7-29 14:44 发表
2楼动作可真快啊,比偶快了1分钟。刚发完发现有人给回复了。


作者: zhaghongshan    时间: 2008-07-29 14:47
顶一下,Shell好学不,我也想尝试一下
作者: blacksabbather    时间: 2008-07-29 15:04
多谢大家了!

但是我还是有点疑惑。为什么 "&&"就可以运行,而竖线这么麻烦呢? []的作用是?
作者: gucuiwen    时间: 2008-07-29 15:09
原帖由 blacksabbather 于 2008-7-29 15:04 发表
多谢大家了!

但是我还是有点疑惑。为什么 "&&"就可以运行,而竖线这么麻烦呢? []的作用是?


在这里,[]的作用是转意,包含在[]中的字符都会失去他特殊的含义,就好比命令行中*、!等字符需要加\,来转意一样。

&字符在正则表达式中不是特殊字符,所以不需要转意,|字符表示或操作,有特殊含义,所以需要转意。
作者: d38179677    时间: 2008-07-29 15:54
恩,学习了
加问下,如果分割符是TAB,该用什么?
作者: blackold    时间: 2008-07-29 15:56
标题: 回复 #10 d38179677 的帖子
'\t'
作者: holylight84    时间: 2008-07-29 17:10
[\t]
作者: liaosnet    时间: 2008-07-29 17:29
学习~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2