Cor*_*rel 13 bash awk camelcasing sed
我想将项目中的几个文件转换camelCase为underscore_case.
我想有一个只需要文件名才能工作的在线人.
Avi*_*Raj 20
你也可以使用sed.
$ echo 'fooBar' | sed -r 's/([a-z0-9])([A-Z])/\1_\L\2/g'
foo_bar
$ echo 'fooBar' | sed 's/\([a-z0-9]\)\([A-Z]\)/\1_\L\2/g'
foo_bar
Run Code Online (Sandbox Code Playgroud)
经过几次不成功的尝试后,我得到了这个(为了可读性我把它写在几行上,但我们可以删除换行符以获得在线):
awk -i inplace '{
while ( match($0, /(.*)([a-z0-9])([A-Z])(.*)/, cap))
$0 = cap[1] cap[2] "_" tolower(cap[3]) cap[4];
print
}' FILE
Run Code Online (Sandbox Code Playgroud)
为了完整起见,我们可以修改它来做相反的事情(对 CamelCase 下划线):
awk -i inplace '{
while ( match($0, /(.*)([a-z0-9])_([a-z])(.*)/, cap))
$0 = cap[1] cap[2] toupper(cap[3]) cap[4];
print
}' FILE
Run Code Online (Sandbox Code Playgroud)
如果您想知道,-i inplaceis a 标志仅适用于 awk >=4.1.0,并且它就地修改文件(与 一样sed -i)。如果您的 awk 版本较旧,则必须执行以下操作:
awk '{...}' FILE > FILE.tmp && mv FILE.tmp FILE
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人!
小智 5
建议的sed答案存在一些问题:
$ echo 'FooBarFB' | sed -r 's/([a-z0-9])([A-Z])/\1_\L\2/g'
Foo_bar_fB
Run Code Online (Sandbox Code Playgroud)
我建议以下
$ echo 'FooBarFB' | sed -r 's/([A-Z])/_\L\1/g' | sed 's/^_//'
foo_bar_f_b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8928 次 |
| 最近记录: |