如何内联 shell 替换其他格式选项(如剪切和管道)
How to do inline shell replace alongside other formatting options like cut and pipe
我正在尝试执行以下操作:
从一个包含 space 分隔参数列表的变量开始 - $cmd_str(包含大约 6 个参数),假设它看起来像:
cmd p1 p2 p3 p4 p5 p6
我的目标是尝试打印它们:
Params:
1 - p1
2 - p2
etc...
所以首先我必须切断 "cmd" 字符串,然后我打算用“\n\t[n] - ”替换 spaces,其中 n 是数
到目前为止我有:
echo $cmd_str | cut -c5-
然后我想添加字符串替换,但无法实现
echo ${$cmd_str | cut -c5-// /"\n\tnum - "}
然后我将不得不用循环中的数字替换每次出现的 "num"...但我还没有做到那一步! - 这样做可能是一种迟钝的方式?
使用 BASH 个数组:
cmd_str="cmd p1 p2 p3 p4 p5 p6"
arr=($cmd_str)
for ((i=1; i<${#arr[@]}; i++)); do printf "%d - %s\n" $i "${arr[$i]}"; done
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6
或使用awk
:
awk -v RS=' ' 'NR>1{printf "%d - %s\n", NR-1, }' <<< "$cmd_str"
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6
如果 cmd
是您的脚本,请使用扩展位置参数的特殊参数 @
。
例如:
let i=0
echo "Params:"
for p in "${@}"; do
let i+=1
printf "\t${i} - %s\n" $p
done
我正在尝试执行以下操作:
从一个包含 space 分隔参数列表的变量开始 - $cmd_str(包含大约 6 个参数),假设它看起来像:
cmd p1 p2 p3 p4 p5 p6
我的目标是尝试打印它们:
Params:
1 - p1
2 - p2
etc...
所以首先我必须切断 "cmd" 字符串,然后我打算用“\n\t[n] - ”替换 spaces,其中 n 是数
到目前为止我有:
echo $cmd_str | cut -c5-
然后我想添加字符串替换,但无法实现
echo ${$cmd_str | cut -c5-// /"\n\tnum - "}
然后我将不得不用循环中的数字替换每次出现的 "num"...但我还没有做到那一步! - 这样做可能是一种迟钝的方式?
使用 BASH 个数组:
cmd_str="cmd p1 p2 p3 p4 p5 p6"
arr=($cmd_str)
for ((i=1; i<${#arr[@]}; i++)); do printf "%d - %s\n" $i "${arr[$i]}"; done
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6
或使用awk
:
awk -v RS=' ' 'NR>1{printf "%d - %s\n", NR-1, }' <<< "$cmd_str"
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6
如果 cmd
是您的脚本,请使用扩展位置参数的特殊参数 @
。
例如:
let i=0
echo "Params:"
for p in "${@}"; do
let i+=1
printf "\t${i} - %s\n" $p
done