我有文件名并且在我的sed脚本中失败了所以我得到了:
"this_is_the_videoIphone.mp4"
"this_is_my_videoNikon.mp4"
"this_is_the_pictureIphone.mp4"
"this_VideoIphone.flv" ... and so on
我想要一个“_”。
规则可以是这样的:(一个或多个[a-z])后跟([A-Z]后跟一个或多个[a-z])
我尝试了很多,但没有任何作用......
filename="$(echo $filename | sed -e 's/\(^.*[a-z]\)\([A-Z][a-z].*$\)/\1_\2/g')"
有什么问题?
答案 0 :(得分:1)
我建议使用GNU sed:
sed -E 's/([a-z][a-z])([A-Z][a-z])/\1_\2/'
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed 's/\B[[:upper:]]\B/_&/g' file
这会在单词中的任何大写字符前插入_
。
N.B。这不符合您的规范,因为它会在两个连续的大写字符之间插入_
。如果单词的最后一个字符是大写的,它也不会插入所述字符。