在 if 语句中将系统路径与 awk 相匹配

在 if 语句中将系统路径与 awk 相匹配

我试图捕获文件系统是否安装在目录树上:

mount | awk '{ if ( $3 == /mnt/pxe ) print mounted }'

但即使安装存在,该字符串也不会被捕获。命令mount输出为:

/home/olegs/infra/isos/test/archlinux-2020.02.01-x86_64.iso on /mnt/pxe type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)

正则表达式匹配也不成功:

mount | grep pxe | awk '{ if ( $3 ~ /mnt/pxe ) print $3 }' 

不匹配

mount | grep pxe | awk '{ if ( $3 ~ .mnt.pxe ) print $3 }'
awk: cmd. line:1: { if ( $3 ~ .mnt.pxe ) print $3 }
awk: cmd. line:1:             ^ syntax error

mount | grep pxe | awk '{ if ( $3 ~ \/mnt\/pxe ) print $3 }'
awk: cmd. line:1: { if ( $3 ~ \/mnt\/pxe ) print $3 }
awk: cmd. line:1:             ^ backslash not last character on line
awk: cmd. line:1: { if ( $3 ~ \/mnt\/pxe ) print $3 }
awk: cmd. line:1:             ^ syntax error

请建议正确的语法以仅匹配/mnt/pxe该字段的路径$3

答案1

你几乎做对了,只需使用引号进行字符串比较:

mount | awk '{ if ( $3 == "/mnt/pxe" ) print "mounted" }'

请注意,“已安装”也包含在引号中。

但是,如果您更喜欢使用正则表达式,请记住以斜杠开头和结尾:

mount | awk '{ if ( $3 ~ /.mnt.pxe/ ) print "mounted" }'
mount | awk '{ if ( $3 ~ /\/mnt\/pxe/ ) print "mounted" }'
mount | awk '{ if ( $3 ~ /^\/mnt\/pxe$/ ) print "mounted" }' #For exact match

相关内容