Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在awk中搜索带双引号的字符串_Regex_Shell_Unix_Awk_Double Quotes - Fatal编程技术网

Regex 在awk中搜索带双引号的字符串

Regex 在awk中搜索带双引号的字符串,regex,shell,unix,awk,double-quotes,Regex,Shell,Unix,Awk,Double Quotes,我有一个巨大的文件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 理想情况下

我有一个巨大的文件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。请建议。

这对我来说很好(我缩短了一些),您使用的是什么系统

awk -F, -vOFS=, '$3 ~/^"AB/{$2="\"foo\""}1' input.dat
"5000","foo","AB8989"
"3000","foo","AB7676"
"2000","   ","A07444"
"4000","   ","BN0909"
PS我在“foo”上加了双引号这对我来说很好(我把它缩短了一些),你用的是什么系统

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、ABB etcI。我正在使用HP unix。如果我不必比较双引号,那么它将匹配AB。但使用双引号时,只有A被选中。我在脚本中意外地在正则表达式中写入了^“AB*。^”AB工作正常。但为什么^“AB*允许”A0?
B*
的意思是
0
或更多
B
,因此它将与A、AB、ABB等匹配