bash回音问题
下面是一个bash脚本,它从html文件中提取一些数据bash回音问题,bash,sed,echo,Bash,Sed,Echo,下面是一个bash脚本,它从html文件中提取一些数据 price=`grep ' <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^ *//g'` grep ' <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^ */
price=`grep ' <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^ *//g'`
grep ' <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^ *//g'
echo "Price: $price"
price=`grep'\$'$1 | sed-e's///g'-e's:::g'-e's/\$//g'-e's/^*//g'`
grep'\$'$1 | sed-e's///g'-e's:::g'-e's/\$//g'-e's/^*//g'
echo“价格:$Price”
sed部分可能需要一些帮助,但这不是问题所在。问题是,当我运行脚本时,它应该将找到的值打印两次,对吗?但它只打印一次,第一次(没有“价格:”)。这里有什么问题?问题是您返回的字符串中有一个
\r
,它会在打印内容之前将光标返回到第一列。使用od-c
进行验证。并使用适当的工具,例如确保不会发生这种情况。第一个grep读取标准输入上的所有内容。然后,第二个grep块尝试读取stdin。我猜与显示的代码不同,赋值实际上发生在子shell中,因此不可见(在子shell退出时丢失)
恐怕你遇到了一个你没有在这里展示的子shell问题。如果可以的话,发布更多你实际使用的代码
---样本:
unset price
price=1
echo $price # works
unset price
echo -n 1 | price=$(cat)
echo $price # works _not_
关于您使用sed的几点意见:
-e's/^*//g'
--您不需要“g”:您的模式在开始时被锚定,因此它只能匹配一次。也可以查找选项卡:-e的/^[:space:]\{1,\}/'
-e's///g'-e's::g'
可以折叠成-e's | | | g'
没有更多的代码,这就是整个脚本(好吧,带有变量的部分是)。它是这样运行的:很好。然后,可能性正在向IgnacioPS提到的“\r”假设转移。不用说你穿的是哪双鞋哈哈哈