如何使用循环将管道命令链接在一起?

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

我想编写一个带有循环的函数来构造命令:

cat example.txt | sed ′s/A/1//' | sed ′s/B/2//' | sed ′s/C/3//' | sed ′s/D/4//'
...

同时接收一串

A B C D

示例.txt

A
B
C
D

这是我到目前为止所想到的,但我不知道将管道命令链接在一起的语法。我想我可以使用 echo 来构造命令的字符串版本,然后以这种方式执行它,但我想知道是否有更好的方法来做到这一点。

elements="A B C D"
n=1
for i in $elements ; do
   cat example.txt | sed "s/$i/$n/g"
   n=$(($n+1))
done

考虑到我生成的命令,输出是有意义的:

cat example.txt | sed "s/A/1/g"
cat example.txt | sed "s/B/2/g"
cat example.txt | sed "s/C/3/g"
cat example.txt | sed "s/D/4/g"

但如上所述,我想将它们“链接”在一起。

bash sed
1个回答
0
投票

既然你标记了这个

sed
,我假设 sed 特定的答案是可以接受的。这根本不需要动态管道元素:您可以通过添加到单个 sed 命令的命令行列表来向其添加更多操作。

elements=( A B C D )
n=1

args=( )
for i in "${elements[@]}"; do
  args+=( -e "s/$i/$n/g" )
  n=$(($n+1))
done

sed "${args[@]}" <example.txt
© www.soinside.com 2019 - 2024. All rights reserved.