Regex 在awk中搜索带双引号的字符串
我有一个巨大的文件dat文件(逗号分隔)。其中,我必须将第二列替换为“foo”(如果第三列的值以“AB”(带引号)开头,则使用双引号) 这是示例input.datRegex 在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 理想情况下
"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等匹配