通过特殊字符在shell脚本中拆分文件地址

问题描述 投票:0回答:2

我正在写一个shell脚本。我有以下格式的文件地址:

/Users/hsn15051/downloads/RandomName1/RandomName2/SN/RandomNumber/Myimage.jpg 

我想使用始终固定的SN参数,以便分割文件地址并具有以下两个字符串

/Users/hsn15051/downloads/RandomName1/RandomName2/SN
/RandomNumber/Myimage.jpg

我怎样才能做到这一点?

bash shell
2个回答
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

1
投票
$ sed -E 's|(.*/SN)(/.*)|\1\n\2|' <<< /Users/hsn15051/downloads/RandomName1/RandomName2/SN/RandomNumber/Myimage.jpg 

Output:

/Users/hsn15051/downloads/RandomName1/RandomName2/SN
/RandomNumber/Myimage.jpg

如您所见,您可以选择替换分隔符,而不是强制使用s///

编辑:

尝试使用与相同的输入:

perl -pe 's|(.*/SN)(/.*)|$1\n$2|'
© www.soinside.com 2019 - 2024. All rights reserved.