我正在编写一个shell脚本。我有以下格式的文件地址:
/Users/hsn15051/downloads/RandomName1/RandomName2/SN/RandomNumber/Myimage.jpg
我想使用始终固定的SN参数,以便分割文件地址并具有以下两个字符串
/Users/hsn15051/downloads/RandomName1/RandomName2/SN
/RandomNumber/Myimage.jpg
我该怎么做?
答案 0 :(得分:1)
$ sed -E 's|(.*/SN)(/.*)|\1\n\2|' <<< /Users/hsn15051/downloads/RandomName1/RandomName2/SN/RandomNumber/Myimage.jpg
/Users/hsn15051/downloads/RandomName1/RandomName2/SN
/RandomNumber/Myimage.jpg
如您所见,您可以选择替换分隔符,而非强制使用s///
使用与sed相同的输入尝试此操作:
perl -pe 's|(.*/SN)(/.*)|$1\n$2|'
答案 1 :(得分:1)
如果您使用的是bash,则可以使用bash本身的功能,带子串删除的参数扩展来解析所需的值:
end="${str##*/SN}" ## get end
begin="${str%$end}" ## remove end to get begin
这不需要额外的子shell或实用程序。
使用您的值的简短示例:
#!/bin/bash
str="/Users/hsn15051/downloads/RandomName1/RandomName2/SN/RandomNumber/Myimage.jpg"
end="${str##*/SN}" ## get end
begin="${str%$end}" ## remove end to get begin
printf "begin: %s\nend : %s\n" "$begin" "$end"
示例使用/输出
$ bash splitstr.sh
begin: /Users/hsn15051/downloads/RandomName1/RandomName2/SN
end : /RandomNumber/Myimage.jpg