这个Shell / Awk命令在做什么?

时间:2013-11-07 20:07:59

标签: regex bash shell awk

APP_PORT=`${AWK} -F\" ' \
                       /org.apache.coyote.tomcat4.CoyoteConnector/ { 
                          getline
                          print $2
                       }' ${JBOSS_APP_CFG} 2>/dev/null`

嗨我对所有层次的正则表达式和转义字符都有点失落,所以从我上面发布的代码我特别想了解F之后立即出现的字段分隔符,所以我们想要一个引号,所以我们用它来逃避它反斜杠,但为什么-F后没有空格?为什么org.apache.coyote.tomcat4.CoyoteConnector放在单引号和它周围的斜线之间?

由于

2 个答案:

答案 0 :(得分:1)

它在第一个双引号之后分配文本,直到第二个双引号或行尾,从包含org.apache.coyote.tomcat4.CoyoteConnector的行后面的每一行,从包含存储在JBOSS_APP_CFG变量中的路径的文件中分配,到APP_PORT变量。

当awk选项遵循同一参数中的选项字符以及下一个参数时,它们接受值。即-F\"参数,将值"赋给选项-F(字段分隔符)。退格会阻止shell将双引号解释为以双引号开头的字符。

单引号用于防止shell以任何方式解释Awk脚本,将其拆分为空格中的单词并将其作为多个参数提供给Awk,而不是一个。

/org.apache.coyote.tomcat4.CoyoteConnector/是模式操作语句中的模式部分(操作在大括号内,接下来是)。见http://www.gnu.org/software/gawk/manual/html_node/Patterns-and-Actions.html

模式部分匹配包含org.apache.coyote.tomcat4.CoyoteConnector的行。操作部分读取下一行并输出其第二个字段(字段由"分隔。)

答案 1 :(得分:0)

它确实读取存储在变量${JBOSS_APP_CFG}中的文件 搜索org.apache.coyote.tomcat4.CoyoteConnector
获取下一行并打印归档编号2
然后将其存储在变量APP_PORT-F\"告诉awk使用"作为提交的分隔符 你也可以像这样写

awk -v FS='"' (code) file
or
awk (code) FS='"' file
or 
awk (code) FS=\" file