sed - 在[a-z] [a-z] [A-Z] [a-z]>>之间插入“_”。 [A-Z] [A-Z] _ [A-Z] [A-Z]

时间:2017-05-19 18:13:16

标签: regex bash sed

我有文件名并且在我的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')"

有什么问题?

2 个答案:

答案 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。这不符合您的规范,因为它会在两个连续的大写字符之间插入_。如果单词的最后一个字符是大写的,它也不会插入所述字符。