linux - 需要在 wsdl - grep/awk/sed 上匹配确切的句子

标签 linux bash awk sed grep

很抱歉,我会尽力更好地解释:

我必须编写一个执行以下操作的脚本 -> 对 wsdl 进行curl 或 wget 并找到以下句子:

<schema targetNamespace="http://net.jboss.org/jmx" xmlns="asdasd2001/XMLSchema"> <import namespace=".xmlsoap.org/soap/encoding/" /><br/> <simpleType name="ObjectNameType"> <simpleContent> <extension base="xsd:string" /> </simpleContent> </simpleType> </schema>

如果 wsdl 上存在这些句子,则返回一个 bool 值 - 所以我想使用 grep 但是,它没有按我的预期工作,因为它会检查 wsdl 上是否有任何句子。示例

   `PcspI01Service%3Fwsdl | grep -F -f ex.bko
    **<import namespace="org/soap/encoding/" /> 
    </schema>
   <import namespace="org/soap/encoding/" /> 
  </schema>**
  <schema targetNamespace="rg/2001/XMLSchema">
  <import namespace="soap/encoding/" /> 
   <simpleType name="ObjectNameType"> 
   <simpleContent>
   <extension base="xsd:string" /> 
   </simpleContent>
     </simpleType>
     </schema>`

在这个例子中,它向我展示了这些行

 `<import namespace="org/soap/encoding/" /> 
    </schema>`

存在于文件中,但这对我没有帮助,我需要匹配所有行并按它们的顺序

现在是不是更清楚了?

提前感谢大家!

最佳答案

您只是说您想在文件中查找多行字符串吗?那是(使用 GNU awk 进行多字符 RS):

awk -v RS='^$' -v ORS= -v regexp="line1
line2
line3" '$0 ~ regexp' file

您没有发布任何预期的输出,因此上面的内容将仅打印整个文件(如果包含)

line1
line2
line3

如果您需要字符串匹配而不是正则表达式匹配,请使用 index() 而不是 ~

如果您没有 gawk,可以选择一些您知道不能出现在输入文件中的控制字符来用作 RS,或者使用连接一次一行地构建一个记录字符串,然后在 END 部分进行测试。

如果这不是您想要做的,请编辑您的问题以澄清并添加一些简短的代表性输入和预期输出。

关于linux - 需要在 wsdl - grep/awk/sed 上匹配确切的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23615079/

相关文章:

awk - 使用 awk 命令修剪前导空格

c - regcmp 模式 $0 含义

python - 在 Linux 中检测文件打开

linux - Unix/Linux 显示有限制的平均文件大小

csv - 根据列的值删除 CSV 文件的行

bash - 删除文件 A 中包含文件 B 中字符串的所有行

linux - 将文件夹中的所有文件复制到同一路径中的文件夹中

c++ - 可以从进程核心访问释放的内存段吗?

bash - 运行 shell 脚本时为 "command not found"

Bash - 解释变量的内容