Chinaunix

标题: 求助关于FS [打印本页]

作者: biglazybug    时间: 2008-12-07 19:28
标题: 求助关于FS
I  SYS101 //CGF/BX1/QI/JUN/GH.HA.G0004/(0)
I  SYS102 //CGF/BBX/TIAN/GH.HA.G0005/(+2)
awk -F "/\(" '{print $2}' file  FS不可以设置成"/("  吗 想去掉最后的 /(.*)
这样设置会报错
作者: ubuntuer    时间: 2008-12-07 19:39
awk -F"[/(]+"
作者: biglazybug    时间: 2008-12-07 19:43
标题: 回复 #2 ubuntuer 的帖子
awk -F"[/(]+" 和 awk -F   "[/(]+" F后空格又区别吗
作者: ynchnluiti    时间: 2008-12-07 20:15
原帖由 biglazybug 于 2008-12-7 19:28 发表
I  SYS101 //CGF/BX1/QI/JUN/GH.HA.G0004/(0)
I  SYS102 //CGF/BBX/TIAN/GH.HA.G0005/(+2)
awk -F "/\(" '{print $2}' file  FS不可以设置成"/("  吗 想去掉最后的 /(.*)
这样设置会报错

awk -F '/\\(' '{print $2}'
作者: biglazybug    时间: 2008-12-07 20:28
标题: 回复 #4 ynchnluiti 的帖子
andy能讲解一下吗 为什么(要这么转义呢 还有F 用' 和 " 区别在哪 呢
作者: ynchnluiti    时间: 2008-12-07 21:34
原帖由 biglazybug 于 2008-12-7 20:28 发表
andy能讲解一下吗 为什么(要这么转义呢 还有F 用' 和 " 区别在哪 呢

1 -F 后多于一个字符时,当成正则表达式,括号在正则表达式里有特殊意义
2  单引号,双引号的区别就是shell中单引号双引号的区别
作者: biglazybug    时间: 2008-12-07 21:47
标题: 回复 #6 ynchnluiti 的帖子
" 中(就一定要有匹配的)?
作者: ynchnluiti    时间: 2008-12-08 09:50
原帖由 biglazybug 于 2008-12-7 21:47 发表
" 中(就一定要有匹配的)?

没明白你说的这句话。

awk -F '/\\(' '{print $2}'
awk -F "/\\\(" '{print $2}'

单引号,双引号都可以使用,关键是shell解释后要能传给awk你想用的分隔符
作者: biglazybug    时间: 2008-12-08 09:57
标题: 回复 #8 ynchnluiti 的帖子
我想问的是 单引号 和双引号在什么时候就有不同了呢 想看看例子
作者: ynchnluiti    时间: 2008-12-08 10:03
原帖由 biglazybug 于 2008-12-8 09:57 发表
我想问的是 单引号 和双引号在什么时候就有不同了呢 想看看例子

刚才贴上了。

awk -F '/\\(' '{print $2}'
awk -F "/\\\(" '{print $2}'

双引号要多一个\
作者: biglazybug    时间: 2008-12-08 10:10
标题: 回复 #10 ynchnluiti 的帖子
多了一个\是因为双引号里面被当作正则 而正则里面(是有意义的 所以要转义两次 而单引号里都关闭了  andy兄我这样理解对吗
作者: ly5066113    时间: 2008-12-08 10:17
标题: 回复 #11 biglazybug 的帖子
和引号没关系,是awk把( | [ + 等当作meta

$ echo '1|+2' | awk -F'|+' '{print $1,$2}'
1| 2
$ echo '1|+2' | awk -F'\\|+' '{print $1,$2}'
1 +2
$ echo '1|+2' | awk -F'\\|\\+' '{print $1,$2}'
1 2
作者: ynchnluiti    时间: 2008-12-08 10:37
原帖由 biglazybug 于 2008-12-8 10:10 发表
多了一个\是因为双引号里面被当作正则 而正则里面(是有意义的 所以要转义两次 而单引号里都关闭了  andy兄我这样理解对吗

双引号中多一个\是为了保证awk收到的是\\(。
-F "\\"  这样传给awk的只有一个\
作者: biglazybug    时间: 2008-12-08 11:01
标题: 回复 #13 ynchnluiti 的帖子
有点糊涂  13问里关于 单引号 双引号里好想没怎么说关于里面有\的问题 现在就是 上面说的理解一些了 现在就是不太清楚为什么 双引的时候转义要比单引号的时候多\ 就是楼上andy说的为啥双引号会消耗一个\
作者: smallstar001    时间: 2008-12-08 11:10
原帖由 biglazybug 于 2008-12-8 11:01 发表
有点糊涂  13问里关于 单引号 双引号里好想没怎么说关于里面有\的问题 现在就是 上面说的理解一些了 现在就是不太清楚为什么 双引的时候转义要比单引号的时候多\ 就是楼上andy说的为啥双引号会消耗一个\



单引号里面的东西都是awk的,shell不会去碰

如果是双引号,shell就会去插上一脚
作者: biglazybug    时间: 2008-12-08 11:12
标题: 回复 #15 smallstar001 的帖子
嘿嘿 谢谢楼上兄弟了 原来是这么事啊 插了一脚 拿走人家一个\
作者: smallstar001    时间: 2008-12-08 11:15
原帖由 ly5066113 于 2008-12-8 10:17 发表
和引号没关系,是awk把( | [ + 等当作meta

$ echo '1|+2' | awk -F'|+' '{print $1,$2}'
1| 2
$ echo '1|+2' | awk -F'\\|+' '{print $1,$2}'
1 +2
$ echo '1|+2' | awk -F'\\|\\+' '{print $1,$2}'
1 2


为什么awk里面转义需要两个'\'??
作者: smallstar001    时间: 2008-12-08 11:16
原帖由 biglazybug 于 2008-12-8 11:12 发表
嘿嘿 谢谢楼上兄弟了 原来是这么事啊 插了一脚 拿走人家一个\


是这么回事,但是为什么awk需要两个 \  转义而不是一个 到不理解
作者: biglazybug    时间: 2008-12-08 11:18
标题: 回复 #17 smallstar001 的帖子
因为   ( | [ +  这些符号 在awk中有特殊意义 需要转2次?哈哈 瞎猜 不知Tim是不是这个意思?
作者: ILoveMK    时间: 2008-12-08 11:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: ynchnluiti    时间: 2008-12-08 12:39
原帖由 smallstar001 于 2008-12-8 11:16 发表


是这么回事,但是为什么awk需要两个 \  转义而不是一个 到不理解

awk在解析FS时,\本身需要转义。最终使用的是\(。
\\( => \\ + ( => \ + ( => \(
作者: biglazybug    时间: 2008-12-08 13:08
哦 是这样子啊




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