了解SED命令



我需要了解一个使用以下命令的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

相关内容

  • 没有找到相关文章

最新更新