![如何使用模式分析获取字符串的子字符串?](https://linux22.com/image/851759/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%A8%A1%E5%BC%8F%E5%88%86%E6%9E%90%E8%8E%B7%E5%8F%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9F.png)
我想使用模式分析获取任意字符串的子字符串。示例字符串:
<string module name="Jai" fathername="S.S. Khan" phone="1234">
<address complete="startz us" />
<worker company="Delta star" />
<string module name="Jai" phone="1234">
<string module name="Jai" value="" phone="1234">
<status now="single />
<string module name="Jai" email= "[email protected]" value="" phone="1234">
<address complete="startz us" />
<worker company="Delta star" />
我想要以下值(grep
编辑phone
):
string module name="Jai" fathername="S.S. Khan"
string module name="Jai"
string module name="Jai" value=""
string module name="Jai" email= "[email protected]" value=""
如果我运行以下命令,它仅返回具有以下内容的行phone
:
cat file.txt | grep phone.
为了克服这个问题,我正在运行:
cat file.txt | grep phone | sed 's/phone=".*"/phone=""/g' | grep -v phone`
它可以起作用,但我想通过精确的模式分析来做到这一点。
有人可以帮助或指导我该怎么做吗?
答案1
我猜你想使用正则表达式来进行模式分析。你可以试试这个perl
:
cat file.txt | perl -ne 'print "$1\n" if /(string module name=.*?)phone.*/'
perl -ne
将file.txt
逐行分析- 那么它将只打印
(...)