此
sed "s/public \(.*\) get\(.*\)()/\1 \2/g"
将转换此
public class ChallengeTO extends AbstractTransferObject {
public AuthAlgorithm getAlgorithm();
public long getCode();
public int getIteration();
public String getPublicKey();
public String getSelt();
};
进入这个
public class ChallengeTO extends AbstractTransferObject {
AuthAlgorithm Algorithm;
long Code;
int Iteration;
String PublicKey;
String Selt;
};
我想将Algorithm
更改为algorithm
,将PublicKey
更改为publicKey
,依此类推。如何将第二段(\2
)的第一个字符转换为小写?
更新
sed "s/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \2\3/g"
选择“我的信”作为\2
,但如果我在其前面放置一个\L
则会转换太多(包括\3
)
答案 0 :(得分:1)
这是一个awk解决方案
awk '
$1=="public" && $3~/^get/ {
sub(/^get/,"",$3)
$3=tolower( substr($3,1,1) ) substr($3,2)
$0="\t"$2" "$3
}1' file
输出
$ cat file
public class ChallengeTO extends AbstractTransferObject {
public AuthAlgorithm getAlgorithm();
public long getCode();
public int getIteration();
public String getPublicKey();
public String getSelt();
};
$ ./shell.sh
public class ChallengeTO extends AbstractTransferObject {
AuthAlgorithm algorithm();
long code();
int iteration();
String publicKey();
String selt();
};
如果你仍然喜欢sed,这里是对你的版本的修改,添加了\l
$ sed 's/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \l\2\3/g' file
public class ChallengeTO extends AbstractTransferObject {
AuthAlgorithm algorithm;
long code;
int iteration;
String publicKey;
String selt;
};
答案 1 :(得分:1)
这与upper- to lower-case using sed几乎相同。
编辑:那里的问题/答案使用\L
GNU sed
扩展名。 \L
可以关闭由\E
开始的转化,因此,如果您将“您的信件”梳理为\2
,则可以在\L
之前添加\E
和sed
紧随其后{1}}。
有关详细信息,请参阅GNU sed
documentation。
如果您没有GNU扩展,可以使用两个单独的y
命令执行此操作。您可以使用tr
命令将与其中一个源角色匹配的角色更改为相应的目标角色。这类似于Unix实用程序{{1}}。