来自xargs管道的bash子字符串

时间:2018-11-29 16:23:19

标签: bash shell scripting echo xargs

阅读如何在bash中获取子字符串,我发现以下命令有效:

var="/aaa/bbb/ccc/ddd"
echo ${var##*/}

哪个产生“ ddd”

我的完整问题是要从管道中读取此消息:

我想实现以下目标:

echo /aaa/bbb/ccc/ddd | xargs echo ${MyVar##*/}

但是它不起作用。

我尝试使用-I选项跟随方式:

echo /aaa/bbb/ccc/ddd | xargs -I MyVar echo ${MyVar##*/}

也没有用,(我认为它不能插值)

有什么办法解决这个问题?

是否还可以读取子字符串的左部分而不是右部分?

2 个答案:

答案 0 :(得分:1)

您可以这样使用它:

echo '/aaa/bbb/ccc/ddd' | xargs -I {} bash -c 'echo "${1##*/}"' - {}

ddd

或仅使用awk

echo '/aaa/bbb/ccc/ddd' | awk -F/ '{print $NF}'

答案 1 :(得分:0)

您可以这样做:

echo '/aaa/bbb/ccc/ddd' | sed -E 's/(.*\/)(.*)/\2/g' | xargs -n 1 $1

希望有帮助!