在shell脚本中逐字符解析字符串
我正在尝试解析一个网址以从中提取一些文本,以便我在下载文件时可以使用相同的内容来重命名我的文件。基本上我想写一个 shell 脚本来做到这一点。我想将 url 收集到一个字符串中,然后逐个字符地解析它。这怎么能在shell脚本中完成???
I am trying to parse a url to extract some text from it so that i can use the same to rename my file when i download it. Basically i want to write to a shell script to do this. I would like to collect the url into a string and then parse it character by character. How could this be done in shell script???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用
子字符串扩展
语法逐个字符地读取字符串:示例:
并使用
参数长度
语法获取字符串的长度:示例:
所以您可以使用以下方法迭代字符:
来自 bash 手册:
You can read a string char-by-char by using the
Substring Expansion
syntax:Example:
And get the length of the string with the
Parameter length
syntax:Example:
So you can iterate over the characters by using this:
From the bash manual:
这将为您提供要保存到的文件名:
工作原理:
"${url%%[?#]*}"
删除?
和之后的任何内容#
(它删除查询和哈希)$(basename "...")
返回最后一个路径组件(最后一个 / 之后的部分)This will give you the filename to save to:
How it works:
"${url%%[?#]*}"
removes any thing after?
and#
(it removes the query and the hash)$(basename "...")
returns the last path component (the part after the last /)或者您可以使用 sed,它效率较低(启动外部命令),但更灵活,并且对于更复杂的情况也更具可读性。
请注意,在 shell (
/bin/sh
) 中,${var#prefix-pattern}
和${var% suffix-pattern}
是唯一可用的字符串操作函数。在 bash 或 zsh 中,您还有更多,但请始终注意您正在使用此类扩展,因为某些系统将更简单的 shell 安装为/bin/sh< /code> 和一些(通常是 Linux 或嵌入式系统之外的其他 Unix 风格)系统根本没有 bash。
or you can use sed, which is less efficient (starts external command), but more flexible and for more complicated cases also more readable.
Note, that in shell (
/bin/sh
), the${var#prefix-pattern}
and${var%suffix-pattern}
are the only string manipulation functions available. In bash or zsh you have many more, but always be aware that you are using such extension, because some systems have simpler shell installed as/bin/sh
and some (usually other Unix flavours than Linux or embedded systems) systems don't have bash at all.