我只是想知道是否有办法替换文件夹中每个文件中的每个下划线(比如.java文件)并将下一个字符转换为大写,例如
getEmployee_Name
→getEmployeeName
us_employee_name
→usEmployeeName
如果我们有id
并且我们希望将I
和D
都大写,那么该怎么做,如
us_employee_id
→usEmployeeID
?我还没学过任何东西,因为我还在学习。我可以在s/_/\U\1/g
中执行类似sed
的操作,还是可以使用某些脚本执行此操作?
答案 0 :(得分:8)
您的建议's/_/\U\1/g'
非常接近。如果你有GNU sed,那么下面的应该工作:
sed 's/_\(.\)/\U\1/g'
(我说应该,因为你想要的并不总是你想要的。)
答案 1 :(得分:1)
Perl脚本:
use String::CamelCase qw(camelize);
while (<>) {
print camelize($_);
}
答案 2 :(得分:1)
来自awk的更多详细信息,但它适用于所有gnu / non-gnu Unix风格:
> s='get_employee_Name'
> awk -F _ '{printf "%s", $1; for(i=2; i<=NF; i++) printf "%s", toupper(substr($i,1,1)) substr($i, 2); print"";}' <<< "$s"
getEmployeeName
答案 3 :(得分:0)
您可以尝试以下bash脚本:
#! /bin/bash
files=(*.java)
for ((i=0; i<=${#files[@]}; i++ )) ; do
file="${files[$i]}"
awk -f r.awk "$file" > "${file}.mod"
done
其中r.awk
是
{
str=$0
mstr=""
while(match(str,/_([[:alnum:]])/,a)) {
q=substr(str,RSTART+RLENGTH,2)
chr=a[1]
pos=RSTART+RLENGTH
pos2=RSTART-1
if (length(q)==1) {
if (match(q,/[[:alnum:]]/)) {
chr=chr q
pos=pos+1
}
}
else if (length(q)==2) {
if (match(q,/[[:alnum:]][[:blank:]]/)) {
pos=pos+1
chr=chr substr(q,1,1)
}
}
mstr=(mstr substr(str,1,pos2) toupper(chr))
str=substr(str,pos)
}
print (mstr str)
}
给定输入文件file1.java
getEmployee_Name getEmployee_Name
us_employee_id
us_employee_id
asdf_asdf__
我们来自awk -f r.awk file1.java
:
getEmployeeName getEmployeeName
usEmployeeID
usEmployeeID
asdfAsdf__