在awk中搜索带双引号的字符串
Posted
技术标签:
【中文标题】在awk中搜索带双引号的字符串【英文标题】:Searching String with double quotes in awk 【发布时间】:2013-10-22 05:04:08 【问题描述】:我有一个巨大的 dat 文件(逗号分隔)。在其中我必须用“foo”替换第二列(带双引号,如果第三列的值以“AB(带引号)
这里是示例 input.dat
"5000","ABC","AB8989"
"3000"," ","AB7676"
"2000"," ","A07444"
"4000"," ","BN0909"
这是我正在使用的命令:
awk -F, -vOFS=, 'if($3 ~/^"AB/)$2="foo"print;' input.dat
这个命令理想情况下应该只匹配第一两行,但我不知道为什么它也匹配第三行。看起来它不是在 reg ex 中的 A 之后读取 B。请提出建议。
【问题讨论】:
【参考方案1】:这对我来说看起来不错(我已经缩短了一些),你在什么系统上?
awk -F, -vOFS=, '$3 ~/^"AB/$2="\"foo\""1' input.dat
"5000","foo","AB8989"
"3000","foo","AB7676"
"2000"," ","A07444"
"4000"," ","BN0909"
PS 我在"foo"
中添加了双引号
【讨论】:
我正在使用 HP-unix。如果我不必比较双引号,那么它匹配 AB。但是用双引号只检查 A。 我在脚本的正则表达式中不小心写了 ^"AB*。^"AB 工作正常。但是为什么 ^"AB* 允许 "A0?B*
确实意味着 0
或更多 B
所以它会匹配 A、AB、ABB、ABBB 等以上是关于在awk中搜索带双引号的字符串的主要内容,如果未能解决你的问题,请参考以下文章