如何从linux中的字符串获取子字符串?
我想从Linux中的字符串中提取特定的字符串。如何从linux中的字符串获取子字符串?
例如,我想从下面的字符串中提取 'android.content.pm.PackageParser.parseBaseApplication'。
该字符串具有常规格式,只有括号内的字符串是可更改的。
Join point 'method-execution(boolean android.content.pm.PackageParser.parseBaseApplication(android.content.pm.PackageParser$Package, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, int, java.lang.String[]))' in Type
但是,我很难找到一个合适的方法来做到这一点。
起初,我试过sed命令,但它太复杂了,所以我无法完成这项工作。
你能推荐其他方法吗?
非常感谢。
回答:
这看起来像AOP语法。基于(
切割并获得第二场,这是除了参数的方法签名:所以具有一定的假设,这是可以做到的:
echo "Join point...." | cut -d'(' -f2 | cut -d' ' -f2
解释。由于我们对返回类型也不感兴趣,因此根据空格分割签名并获取第二个字段,即方法名称。
回答:
如果有兴趣的字符串永远是第一位(
再经过第二个字符串:
echo "..." | awk -F '[()]' '{split($2,a," "); printf a[2]}'
解压。
它使用分隔符(
和)
分隔线。所以$2
之间的数据将会在(
和)
之间。 split
分裂$2
,你会得到第二个字符串是
android.content.pm.PackageParser.parseBaseApplication
您的例子。
回答:
这是根据你的既定不变的,那你捕获子是从文件到文件的变化只是一部分,这里是一个Perl的解决方案:
Extract=$(perl -ne 'print $1 if /\s*Join point \x27method-execution\(boolean\s+([^(]*)/' file_to_search) echo $Extract
android.content.pm.PackageParser.parseBaseApplication
我使用了完整的潜在客户,因为它减少了假阳性的可能性,但是如果你发现其他东西改变了,并且想要使用它的子串(例如,“方法执行(布尔)”,那么这是你的选择。到变量子字符串开始的位置,然后到下一个不变量 - 左括号 - 所以我们可以在不打开括号的情况下捕获它,因为它是可能的当某些人际交互改变变体时,我允许使用\ s +(一个或多个空格)来增加空格。
你可以在sed中使用几乎相同的正则表达式,但需要使用整个字符串以避免它成为输出的一部分。例如,在速记:
sed -r 's/.*LEAD_IN(CAPTURE_TEXT).*/\1/
哪里LEAD_IN是恒定的领导者,“连接点......”和CAPTURE_TEXT同捕获组在perl的解决方案。主要区别在于引领和嘲讽“*”消耗整个主题。
以上是 如何从linux中的字符串获取子字符串? 的全部内容, 来源链接: utcz.com/qa/263523.html