如何从给定字符串中提取特定字符串?

时间:2017-12-24 14:15:55

标签: bash shell

我想从pwd命令生成的给定字符串中获取尾部 例如,如果pwd命令返回:

/home/example/src/github.com/abc/def  

我想从github.com得到字符串到结尾。

github.com/abc/def 

5 个答案:

答案 0 :(得分:2)

您可以在$(pwd)中使用参数展开来实现您的目标。假设您具有{str##*}变量中提到的路径(与github.com的输出相同),您可以使用语法printf 'github.com%s' "${PWD##*github.com}" 语法从去除限制器的出现中获取最短的字符串到字符串的结尾。在这种情况下,我们使用多字符分隔符-v。只是做

printf

要将其存储在新路径中,只需使用printf -v newvar 'github.com%s' "${PWD##*github.com}" printf '%s\n' "$newvar" github.com/abc/def 提供的printf语法

newvar="github.com${PWD##*github.com}"

或者简单地在没有{{1}}的情况下使用

{{1}}

答案 1 :(得分:2)

您可以使用sed

pwd | sed 's/.*github.com/github.com/'

答案 2 :(得分:1)

又一个解决方案,grep

pwd | grep -Eo 'github.com.*'

基本上:取pwd并打印出包含和在github.com之后的位

或者,即使你在github.com///的子目录中,只想在github.com之后找到两位(作者和回购名称):

pwd | grep -Eo 'github.com/([^/]+/?){2}'

在github.com之后提取了2个段

答案 3 :(得分:0)

您可以使用sed获取字符串的其余部分,然后将其与' github.com'使用xargs获取所需的字符串:

pwd | sed 's/^.*github\.com//' | xargs -I {} echo "github.com{}"

输出:

github.com/abc/def

答案 4 :(得分:0)

如果您的目标是开始使用包含句点的任何目录段打印内容,则可以使用awk执行以下操作:

$ awk 'BEGIN{ORS=RS="/"} /\./ {n=1} n' <<< "/home/example/src/github.com/abc/def"
github.com/abc/def

当然,使用sed

可以获得相同的结果
sed 's/.*[^a-z]\([a-z][a-z]*\..*\)/\1/'

或者单独grep:

egrep -o '[a-z]+\..*'