我需要了解一个使用以下命令的shell代码,该命令使用Google Maps API从源到目标获取指示:
wget --no-parent -O - https://maps.googleapis.com/maps/api/directions/json?origin=$begin&destination=$finish&sensor=false > new.txt
接下来,我们获取输出的以下行:
**"html_instructions" : "Head u003cbu003enorthwestu003c/bu003e"**
grep -n html_instructions new.txt > new1.txt
有人可以告诉我使用的含义:
sed -e 's/\u003cb//g'
等在以下命令中:
sed -e 's/\u003cb//g' -e 's/\u003e//g' -e 's/\u003c/b//g' -e 's/\u003c//g' -e 's/div.*div//g' -e 's/.*://g' -e 's/"//g' -e 's/ "//g' new1.txt > new2.txt
仅输出Head northwest
。
预先感谢!
sed -e 's/\u003cb//g' -e 's/\u003e//g' -e 's/\u003c/b//g' -e 's/\u003c//g' -e 's/div.*div//g' -e 's/.*://g' -e 's/"//g' -e 's/ "//g' new1.txt > new2.txt
每个-e
之后的字符串是sed
命令。SED命令s/\u003cb//g
搜索Unicode字符003CB的所有出现(这是带有透析的希腊小字母Upsilon),并无需替代它。换句话说,它从字符串中删除字符。
因此, sed
命令从行和new1.txt中删除Unicode字符003CB,U003E和U003C的每一次出现,并将输出发送到new2.txt。
此外,s/div.*div//g
会导致任何以" DIV"开头和结尾的字符串被删除。命令s/.*://g
从行的开头删除了任何文本到该行中的最后一个冒号。s/"//g
删除了双引号字符的所有情况。s/ "//g
删除了每个出现空间,然后是双引号。
通常,sed
命令s/new/old/
搜索新的新事件,并用旧替换。在g
结束时,就像s/new/old/g
一样,它在全球范围内进行替代:寻找新的新事物并用旧的替代。在这些命令中添加大量功能,new
可能是正则表达式。考虑 s/.*:
//g . The dot character has the special meaning of "any character at all". The star character means zero or more of the preceding character. Thus the regular expression
。
您可以一口气使用awk
:
awk -F" '/html_instructions/ {gsub(/(\u003(c|cb|e)|/b)/,x);print $4}'
Head northwest
所以整行应该是:
wget --no-parent -O - https://maps.googleapis.com/maps/api/directions/json?origin=$begin&destination=$finish&sensor=false | awk -F" '/html_instructions/ {gsub(/(\u003(c|cb|e)|/b)/,x);print $4}'
Head northwest
将其放入变量
d=$(wget --no-parent -O - https://maps.googleapis.com/maps/api/directions/json?origin=$begin&destination=$finish&sensor=false | awk -F" '/html_instructions/ {gsub(/(\u003(c|cb|e)|/b)/,x);print $4}')
echo $d
Head northwest