在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中搜索带双引号的字符串的主要内容,如果未能解决你的问题,请参考以下文章

带双引号的 PHP/SQL 准备语句

win7文件搜索技巧

Inno Setup, Pascal 字符串带双引号如何写

db2怎样使卸出的字符型字段不带双引号,用啥关键字

shell 解析json字符串

shell 解析json字符串