如何使用shell脚本修剪“/”?

时间:2011-06-04 16:37:51

标签: html shell

我一直在玩一个小的shell脚本,以便从使用lynx下载的HTML页面中获取一些信息。

我的问题是我收到了这个字符串:<span class="val3">MPPTN: 0.9384</span></td>

我可以使用以下方法修改其中的第一部分:

trimmed_info=`echo ${info/'<span class="val3">'/}`

字符串变为:“MPPTN:0.9384”

但我怎样才能修剪最后一部分?好像“/”似乎弄乱了echo命令......我试过了:

echo ${finalt/'</span></td>'/};

4 个答案:

答案 0 :(得分:6)

不确定使用sed是否正常 - 提取数字的一种方法可能是......

 echo '<span class="val3">MPPTN: 0.9384</span></td>' | sed 's/^[^:]*..//' | sed 's/<.*$//'

答案 1 :(得分:4)

${VARIABLE/PATTERN/REPLACEMENT}的行为取决于您正在使用的shell,以及bash的版本。在ksh下,或者在最近足够(我认为≥4.0)版本的bash下,${finalt/'</span></td>'/}根据需要剥离子字符串。在旧版本的bash中,引用相当古怪;你需要写${finalt/<\/span><\/td>/}(它仍适用于较新的版本)。

由于您正在删除后缀,因此您可以使用${VARIABLE%PATTERN}${VARIABLE%%PATTERN}结构。在这里,您将删除第一个</之后的所有内容,即与模式</*匹配的最长后缀。同样,您可以使用${VARIABLE##PATTERN}删除主要HTML标记。

trimmed=${finalt%%</*}; trimmed=${trimmed##*>}

添加了优势:与${…/…/…}不同,${…#…}特定于bash / ksh / zsh,并且在所有三种情况下的工作方式略有不同,${…%…}echo "${finalt/'</span></td>'/}" 完全可移植。他们没有那么多,但在这里他们已经足够了。

附注:虽然在这个特定情况下它没有引起任何问题,但你应该总是在变量替换周围添加双引号,例如

{{1}}

否则shell将在结果中展开通配符和空格。简单的规则是,如果你没有充分的理由留下双引号,你就把它们放进去。

答案 2 :(得分:2)

解决方案在很大程度上取决于您想要做的完全。如果您的所有字符串都是<span class="val3">XXXXX: X.XXXX</span></td>形式,那么最简单的解决方案是

echo $info | cut -c 20-32

如果它们的格式为<span class="val3">variable length</span></td>,则最简单的解决方案是

echo $info | sed 's/<span class="val3">//' | sed 's/<\/span><\/td>//'

如果它更通用,你可以像在Sai的答案中那样使用正则表达式。

答案 3 :(得分:1)

我建议使用sed命令来执行此类操作:

echo "$string" | sed "s/$regex/$replace/"