bash 来自 xargs 的子字符串已通过管道传输
bash substring from xargs piped
阅读如何在 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##*/}
也没有用,(我认为它没有插值)
有什么办法解决这个问题吗?
是否可以同时读取子字符串的左侧部分而不是右侧部分?
你可以这样使用它:
echo '/aaa/bbb/ccc/ddd' | xargs -I {} bash -c 'echo "${1##*/}"' - {}
ddd
或者只使用 awk
:
echo '/aaa/bbb/ccc/ddd' | awk -F/ '{print $NF}'
你可以这样做:
echo '/aaa/bbb/ccc/ddd' | sed -E 's/(.*\/)(.*)//g' | xargs -n 1
希望对您有所帮助!
阅读如何在 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##*/}
也没有用,(我认为它没有插值)
有什么办法解决这个问题吗?
是否可以同时读取子字符串的左侧部分而不是右侧部分?
你可以这样使用它:
echo '/aaa/bbb/ccc/ddd' | xargs -I {} bash -c 'echo "${1##*/}"' - {}
ddd
或者只使用 awk
:
echo '/aaa/bbb/ccc/ddd' | awk -F/ '{print $NF}'
你可以这样做:
echo '/aaa/bbb/ccc/ddd' | sed -E 's/(.*\/)(.*)//g' | xargs -n 1
希望对您有所帮助!