我正在尝试运行此命令:
./smstocurl SLASH2.911325850268888.911325850268896
smstocurl
脚本:
#SLASH2.911325850268888.911325850268896
model=$(echo \&model=$1 | cut -d'.' -f 1)
echo $model
imea1=$(echo \&simImea1=$1 | cut -d'.' -f 2)
echo $imea1
imea2=$(echo \&simImea2=$1 | cut -d'.' -f 3)
echo $imea2
echo $model$imea1$imea2
收到结果
&model=SLASH2911325850268888911325850268896
结果预期
&model=SLASH2&simImea1=911325850268888&simImea2=911325850268896
我在这里缺少什么?
答案 0 :(得分:4)
您cut
基于点.
。在第一种情况下,您想要的字符串包含第一个字符串,即包含&model
的字符串,然后打印出来。
但是,在其他情况下,您会获得第2和第3个区块(-f2
,-f3
),以便imea
文字被删除。
相反,我会使用这样的东西:
while IFS="." read -r model imea1 imea2
do
printf "&model=%s&simImea1=%s&simImea2=%s\n" $model $imea1 $imea2
done <<< "$1"
请注意使用printf
和变量来更好地控制我们正在编写的内容。使用像echo
这样的大量逃脱可能会有风险。
while IFS="." read -r model imea1 imea2; do printf "&model=%s&simImea1=%s&simImea2=%s\n" $model $imea1 $imea2
done <<< "SLASH2.911325850268888.911325850268896"
返回:
&model=SLASH2&simImea1=911325850268888&simImea2=911325850268896
或者,这个sed
使它成为:
sed -r 's/^([^.]*)\.([^.]*)\.([^.]*)$/\&model=\1\&simImea1=\2\&simImea2=\3/' <<< "$1"
通过捕捉由点分隔的每个单词块并打印回来。
答案 1 :(得分:1)
你也可以这样使用
生成强>
./program SLASH2.911325850268888.911325850268896
<强>脚本:强>
#!/bin/bash
String=`echo $1 | sed "s/\./\&simImea1=/"`
String=`echo $String | sed "s/\./\&simImea2=/"`
echo "&model=$String
<强>输出:强>
&model=SLASH2&simImea1=911325850268888&simImea2=911325850268896
答案 2 :(得分:1)
awk way
awk -F. '{print "&model="$1"&simImea1="$2"&simImea2="$3}' <<< "SLASH2.911325850268888.911325850268896"
或
awk -F. '$0="&model="$1"&simImea1="$2"&simImea2="$3' <<< "SLASH2.911325850268888.911325850268896"
&model=SLASH2&simImea1=911325850268888&simImea2=911325850268896