【问题标题】:Grep word from a file in solaris using awk使用 awk 从 solaris 中的文件中提取单词
【发布时间】:2017-11-21 18:21:15
【问题描述】:

我在 Oracle Solaris 10 上并尝试使用 awk 和 cut 命令的组合从 xml 文件中 grep 一个单词。我在 xml 文件中有下面提到的字符串。

<Resource driverClassName="oracle.jdbc.OracleDriver"  name="jdbc/LiferayPool" type="javax.sql.DataSource" username="PROD_LIFERAY" password="" url="jdbc:oracle:thin:@server02:1521:PROD0100 " maxActive="20" maxIdle="10" minIdle="3" maxWait="10000" initialSize="3" validationInterval="60000" testOnBorrow="true" validationQuery="select 1 from dual" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/>

我想构建 awk 命令以从上面示例中显示当前 PROD0100 的位置开始 grep 单词。如果有人可以帮助我弄清楚,我将不胜感激。

【问题讨论】:

  • 您确实应该使用 XML 解析器来解析 XMK,同时尝试将双引号更改为换行符,看看是否有帮助...tr '"' '\n' &lt; YourXMLfile
  • 您的问题不清楚。您是否要打印包含 PROD0100 的每一行或打印在您的示例中恰好包含 PROD0100 的位置出现的字符串或其他内容? edit 您的问题是为了阐明您的要求并向我们展示给定您的示例输入以及您迄今为止尝试过的预期输出。

标签: awk sed cut solaris-10


【解决方案1】:

像往常一样,这类问题在 Unix 上有很多方法可以解决。

Awk 将模式与操作匹配,因此您需要类似

/PROD0100/ {
    # your actions here on the matching line
}

默认情况下,awk 将每一行拆分为由空格分隔的字段。

所以如果你使用类似的东西

gawk '/PROD0100/{ for (i=1;i<=NF;i=i+1) { if (match($i, ".*PROD0100.*") != 0) { print "matching word "$i } } }' test

(其中 test 是要读取的包含字符串的文件)那么你应该得到

matching word url="jdbc:oracle:thin:@server02:1521:PROD0100

但是,对于您提供的输入,您可能会遇到一些问题,因为在找到的单词的右双引号之前有一个空格

【讨论】:

  • 谢谢保罗,我已经编辑了描述。我不想 grep 特定的 PROD0100 单词,而是位于该位置的单词。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 2014-09-20
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多