首页 > 解决方案 > 使用 Shell 脚本从冗长的字符串中提取子字符串

问题描述

我正在尝试从一个非常大的字符串中查找/提取子字符串。这里的问题是子字符串可能会重新出现/重复。有人可以帮忙吗。

实际字符串:

Shell/Retrieve/force-app-temporary/main/default/classes/Account.cls-meta.xml
and
Shell/Retrieve/force-app/main/default/classes/Account.cls-meta.xml
differ Files
Shell/Retrieve/force-app-temporary/main/default/pages/Contact.cls-meta.xml
and
Shell/Retrieve/force-app/main/default/pages/Contact.cls-meta.xml
differ Files
Shell/Retrieve/force-app-temporary/main/default/Layout/Lead.cls-meta.xml
and Shell/Retrieve/force-app/main/default/Layout/Lead.cls-meta.xml
differ Files...

预期的子字符串:

查找在“default/”之后开始并以立即“/”结尾的子字符串。例如,在上面的字符串中,它应该返回如下

classes
classes
pages
pages
Layout
Layout

我在下面尝试过,但它不起作用。

Substrings=$(sed -n "s/.*\ default/\(.*\)/\.com.*/\\1/p" <<< $Actual_String)

标签: linuxbashshell

解决方案


差不多就是这样:

sed -n 's@.*/default/\([^/]*\).*@\1@p'

s您可以在命令中使用任何字符sed。我@在这里使用 , s@EXP@REP@,所以/不会混合。

然后我匹配.*所有内容,/default/然后我记得\( \) [^/]*任何零个或多个字符,直到^/一个斜线。然后我将字符串的其余部分与.*. 整行 get 替换了 get 记住的内容。


推荐阅读