我正在尝试解析一个url以从中提取一些文本,以便我可以使用相同的方法在我下载时重命名我的文件。基本上我想写一个shell脚本来做这件事。我想将url收集到一个字符串中,然后逐个字符地解析它。怎么可以在shell脚本中完成???
答案 0 :(得分:0)
这将为您提供要保存到的文件名:
url="http://www.example.com/path?foo#bar"
echo $(basename "${url%%[?#]*}")
# => "path"
工作原理:
"${url%%[?#]*}"
删除?
和#
之后的任何内容(它会删除查询和哈希值)$(basename "...")
返回最后一个路径组件(最后一个/之后的部分)答案 1 :(得分:0)
您可以使用Substring Expansion
语法读取字符串char-by-char:
${parameter:offset:length}
示例:
str="abcd"
char=${str:1:1} # => "b"
使用Parameter length
语法获取字符串的长度:
${#parameter}
示例:
${#str}
所以你可以使用这个来迭代字符:
for (( i = 0; i < ${#str}; ++i)); do
echo "${str:$i:1}"
done
来自bash手册:
${#parameter}
Parameter length
。parameter
的值的字符长度被替换。
${parameter:offset}
${parameter:offset:length}
Substring Expansion
。从parameter
指定的字符开始扩展为offset
的最长字符长度。
答案 2 :(得分:0)
url='http://youtube.com/watch?v=Od3xkrxcsE8&feature=relmfu'
url=${url#*v=}
url=${url%%&*}
或者您可以使用效率较低的sed(启动外部命令),但更灵活,对于更复杂的情况也更具可读性。
url='http://youtube.com/watch?v=Od3xkrxcsE8&feature=relmfu'
url=$(printf '%s' "$url" | sed 's+.*v=\([^&]*\).*+\1+')
请注意,在 shell (/bin/sh
)中,${var#prefix-pattern}
和${var%suffix-pattern}
是仅字符串操作函数。在 bash 或 zsh 中,您还有更多,但始终要注意您正在使用此类扩展,因为某些系统安装了更简单的shell /bin/sh
和一些(通常其他Unix风格,而不是Linux或嵌入式系统)系统根本没有bash。