有很多解决方案可以处理单个字符,但不适用于子字符串。我有一个关闭的解决方案,但它会在最后一次出现子字符串后删除所有内容:
$ echo pkg-new-pkg-20180925-090719.x86_64 | sed -n -e "s/^.*pkg-//p"
20180925-090719.x86_64
Run Code Online (Sandbox Code Playgroud)
我想要的是:
$ echo pkg-new-pkg-20180925-090719.x86_64 | ???
new-pkg-20180925-090719.x86_64
Run Code Online (Sandbox Code Playgroud)
pkg-在这种情况下,我要拆分的子字符串。有任何想法吗?
在一个变量中:
var=pkg-new-pkg-20180925-090719.x86_64
printf '%s\n' "${var#*pkg-}"
Run Code Online (Sandbox Code Playgroud)
${var#pattern}删除与模式匹配的最短前导部分(${var##pattern}最长部分)。
在文本输入流上:
sed 's/pkg-/\
/;s/.*\n//'
Run Code Online (Sandbox Code Playgroud)
这将用换行符(否则不会出现在模式空间中的字符)替换第一次出现的pkg-,然后删除该换行符之前的所有内容。一些sed实现还允许您编写它,sed 's/pkg-/\n/;s/.*\n//'尽管这既不是可移植的也不是标准的。
使用 ast-open sed(也适用于ssed -R):
sed -E 's/.*?pkg-//'
Run Code Online (Sandbox Code Playgroud)
与perl:
perl -pe 's/.*?pkg-//'
Run Code Online (Sandbox Code Playgroud)
.*?的非贪婪版本在哪里.*?
| 归档时间: |
|
| 查看次数: |
3606 次 |
| 最近记录: |