我想编写一个带有循环的函数来构造命令:
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"
但如上所述,我想将它们“链接”在一起。
既然你标记了这个
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