Java의 열거형 파일은 구조적으로 지저분해질 수 있습니다. 열거형 이름만 가져오려고 합니다.
...
import com.mckesson.dex.model.activityLog.concreteFactory.ModifiedPropertyYesNoFactory;
public enum OrganizationActivityLogItemType implements IActivityLogItemType<OrganizationActivityLog>, DisplaysAs
{
@Deprecated GENE_VARIANT_PUBLIC( "Gene Variant/Mutation/Allele", null ),
VARIANTS_MUTATIONS( "Variants/Mutations/ Alleles/Loci/Probes", ALFactory.PUBLIC_PRIVATE ),
CATEGORIES( "Categories", null ),
PUBLIC_VISIBLITY_COVERED_WHEN_MEETS_NECESSITY_CRITERIA( "Covered - When Meets Medical Necessity Criteria",
ALFactory.PUBLIC_PRIVATE ),
PUBLIC_VISIBLITY_NOT_COVERED_INVESTIGATIONAL(
"Not Covered - Investigational",
ALFactory.PUBLIC_PRIVATE ),
PUBLIC_VISIBLITY_NOT_COVERED_NOT_MEDICALLY_NECESSARY(
"Not Covered - Not Medically Necessary",
ALFactory.PUBLIC_PRIVATE ),
...
가깝지만 더 좋을 수도 있을 것 같아요.
awk '{ print $1 }' My.java | grep -v '^"' | grep -v '^ALFactory' | sed -e 's/(//'
Unix cli 도구를 사용하여 enum 파일에서 enum 이름을 얻는 방법은 무엇입니까?
솔루션은 적어도 OS X로 포팅해야 합니다. 왜냐하면 그것이 제 작업 환경이기 때문입니다. 하지만 저는 Linux에서도 실행하는 것을 선호합니다.
답변1
perl
이 작업을 수행하는 스크립트는 다음과 같습니다. 명령줄에서 파이프 명령을 실행하는 것은 불가능하거나 유지 관리가 불가능합니다. 순진한 접근 방식은
perl -npe 's/\b|\s+/\n/g' < My.java | grep '^[A-Z]\+_[A-Z_]\+'
그러나 다음 스크립트가 더 좋습니다.
#!perl -w
my $content = do { local $/; <> };
my @tokens = split /\b|\s+/, $content;
my $n = 0;
my $skip;
foreach (@tokens) {
$n++; $skip = 0;
next if /\s+/;
next if /"/ ... /"/; # skip strings
next if /\(/ .. /\)/; # skip parameters
next if /@/ .. /^\w+$/; # skip annotations
$skip ||= 1 if $n == 1 .. /\benum\b/; # skip from beginning to enum
$skip ||= 1 if /enum/ .. /\{/; # skip to open bracket
next if $skip;
last if /\}/;
print $_, "\n";
}