如何将一个命令的标准输出通过管道传输到 %- 以删除 bash 中的尾部破折号?

问题描述 投票:0回答:1

我有这个命令:

MODIFIED_BRANCH_NAME=$(echo $BRANCH_NAME | tr '/_.' '-' | tr -s '-' | tr '[:upper:]' '[:lower:]' )
MODIFIED_BRANCH_NAME=${MODIFIED_BRANCH_NAME%-}

我想用一行来做。如何将某些内容通过管道传输到 %- 运算符?

示例:

BRANCH_NAME=abc//kdkd_kdkd_-

MODIFIED_BRANCH_NAME 将是 abc-kdkd-kdkd

实际上我想做的是,在完成

$(echo $BRANCH_NAME | tr '/_.' '-' | tr -s '-' | tr '[:upper:]' '[:lower:]' )
之后,我想删除尾随的“-”(如果存在)

bash shell sh
1个回答
0
投票

如何将某些内容通过管道传输到 %- 运算符?

你不能将某些东西通过管道传递给操作符。运算符作用于值,而不是流。

删除 bash 中尾随的破折号?

sed
将是一个简单的方法。
sed 's/-$//g'
将替换结尾处的
-
(
$
)。演示:

% sed s/-$//g <<<"hi-world-"
hi-world

所以你的新管道可能看起来像:

MODIFIED_BRANCH_NAME=$(echo $BRANCH_NAME | tr '/_.' '-' | tr -s '-' | tr '[:upper:]' '[:lower:]' | sed 's/-$//g' )

或者您可以将这些命令替换为

sed
,它可以完成大部分命令。

%# echo "Ji/wor..ld_" | sed -e s/[./_]/-/g -e 's/-\{2,\}/-/g' -e s/-$//g   | tr [:upper:] [:lower:]
ji-wor-ld
© www.soinside.com 2019 - 2024. All rights reserved.