我想更改以下模式:
getFoo_Bar
到:
getFoo_bar
(注意下b)
既不知道 foo 也不知道 bar,替换模式是什么?
我开始写作
sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1
但我卡住了:我想写“\2 小写”,我该怎么做?
也许 sed 不适应?
使用 sed 将 getFoo_Bar 更改为 getFoo_bar :
echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'
大写和小写字母由 处理:
\U
使所有文本为右大写。\u
仅将第一个字符变为右大写。\L
使所有文本为右小写。\l
仅将第一个字符变为右小写。(注意是小写字母L)该示例只是模式匹配的一种方法,仅基于修改单个文本块。使用示例,getFoo_BAr 转换为 getFoo_bAr,注意 A 没有改变。
s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g
测试:
$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar
有点短:
echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
我能想到的最短的:
echo getFoo_Bar | sed 's/_./\L&/'
您可以为此使用 perl:
perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'
\l 是这里的诀窍。
sed 不对匹配的组进行大写/小写。
如果您想在下划线之后用小写字母编写所有内容,那么这对您有用:
echo getFoo_Bar | gawk -F_ '{print tolower($2)}'
echo getFoo_Bar | sed 's/[Bb]/\L&/g'