使用 xargs 按破折号拆分文件内容字符串
Split file content strings by dash using xargs
我需要读取一个文件并将每一行拆分为一个域和一个应用程序字符串
domain.com-backend
domain.com-frontend
对于每一行,我需要调用一个 docker 构建命令(回显只是为了查看命令):
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 .
尝试
while IFS= read -r line
do
echo docker build -t ${line} -f apps/$(cut -d'-' -f1 <<<${line})/$(cut -d'-' -f2 <<<${line})/Dockerfile .
done < "${FILE}"
演示:
$while IFS= read -r line
> do
> echo docker build -t ${line} -f apps/$(cut -d'-' -f1 <<<${line})/$(cut -d'-' -f2 <<<${line})/Dockerfile .
> done < test.txt
docker build -t domain.com-backend -f apps/domain.com/backend/Dockerfile .
docker build -t domain.com-frontend -f apps/domain.com/frontend/Dockerfile .
$cat test.txt
domain.com-backend
domain.com-frontend
编辑:一个班轮
while IFS= read -r line; do echo docker build -t ${line} -f apps/$(cut -d'-' -f1 <<<${line})/$(cut -d'-' -f2 <<<${line})/Dockerfile . ; done < "${FILE}"
你可以用这个循环来完成:
while read -r x; do
echo docker build -t "$x" -f "apps/${x/-/\/}/Dockerfile" .
done < "$FILE"
测试后删除echo
。
如果您想先过滤文件,例如那里有更多行,你想先 grep "-"
就像你的例子一样,你可以使用这个语法(仅 bash):
while read -r x; do
echo docker build -t "$x" -f "apps/${x/-/\/}/Dockerfile" .
done < <(grep "-" "$FILE")
阅读时在 -
上拆分文件并调用您的命令:
while IFS='-' read -r dom app; do
docker build -t "$dom-$app" -f "apps/$dom/$app/Dockerfile .
done < "$file"
阅读:bashfaq how to read a file field by field
或者您可以使用 xargs
,如果您需要:
sed 's/^\(.*\)-\(.*\)$/- /' "$file" |
xargs -n3 sh -c 'docker build -t "" -f "apps///Dockerfile"' _
甚至:
sed 's@^\(.*\)-\(.*\)$@- -f apps///Dockerfile@' "$file" |
xargs -n3 docker build -t
我需要读取一个文件并将每一行拆分为一个域和一个应用程序字符串
domain.com-backend
domain.com-frontend
对于每一行,我需要调用一个 docker 构建命令(回显只是为了查看命令):
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 .
尝试
while IFS= read -r line
do
echo docker build -t ${line} -f apps/$(cut -d'-' -f1 <<<${line})/$(cut -d'-' -f2 <<<${line})/Dockerfile .
done < "${FILE}"
演示:
$while IFS= read -r line
> do
> echo docker build -t ${line} -f apps/$(cut -d'-' -f1 <<<${line})/$(cut -d'-' -f2 <<<${line})/Dockerfile .
> done < test.txt
docker build -t domain.com-backend -f apps/domain.com/backend/Dockerfile .
docker build -t domain.com-frontend -f apps/domain.com/frontend/Dockerfile .
$cat test.txt
domain.com-backend
domain.com-frontend
编辑:一个班轮
while IFS= read -r line; do echo docker build -t ${line} -f apps/$(cut -d'-' -f1 <<<${line})/$(cut -d'-' -f2 <<<${line})/Dockerfile . ; done < "${FILE}"
你可以用这个循环来完成:
while read -r x; do
echo docker build -t "$x" -f "apps/${x/-/\/}/Dockerfile" .
done < "$FILE"
测试后删除echo
。
如果您想先过滤文件,例如那里有更多行,你想先 grep "-"
就像你的例子一样,你可以使用这个语法(仅 bash):
while read -r x; do
echo docker build -t "$x" -f "apps/${x/-/\/}/Dockerfile" .
done < <(grep "-" "$FILE")
阅读时在 -
上拆分文件并调用您的命令:
while IFS='-' read -r dom app; do
docker build -t "$dom-$app" -f "apps/$dom/$app/Dockerfile .
done < "$file"
阅读:bashfaq how to read a file field by field
或者您可以使用 xargs
,如果您需要:
sed 's/^\(.*\)-\(.*\)$/- /' "$file" |
xargs -n3 sh -c 'docker build -t "" -f "apps///Dockerfile"' _
甚至:
sed 's@^\(.*\)-\(.*\)$@- -f apps///Dockerfile@' "$file" |
xargs -n3 docker build -t