首页 > 解决方案 > 使用 xargs 通过破折号拆分文件内容字符串

问题描述

我需要读取一个文件并将每一行拆分为一个域和一个应用程序字符串

domain.com-backend
domain.com-frontend

对于每一行,我需要调用一个 docker build 命令(回显只是为了查看命令):

cat $FILE | grep '-' | xargs -I {} echo docker build -t {full} -f apps/{domain}/{application}/Dockerfile .

所以在这个例子中,我希望输出

docker build -t domain.com-backend -f apps/domain.com/backend/Dockerfile .
docker build -t domain.com-frontend -f apps/domain.com/frontend/Dockerfile .

标签: bashshellshxargs

解决方案


你可以用这个循环来做到这一点:

while read -r x; do
    echo docker build -t "$x" -f "apps/${x/-/\/}/Dockerfile" .
done < "$FILE"

测试后删除echo

查看更多bash 参数扩展


如果您想首先过滤文件,例如那里有更多行并且您希望首先grep "-"在您的示例中喜欢,您可以使用以下语法(仅限 bash):

while read -r x; do
    echo docker build -t "$x" -f "apps/${x/-/\/}/Dockerfile" .
done < <(grep "-" "$FILE")

推荐阅读