a.txt
버전 문자열이 포함된 파일 이름 목록이 파일에 포함되어 있습니다 . 예:
gson-2.1
xmlParserAPIs-2.4.0
acrobat-1.1
orai18n-mapping-12.1.0.2
jdbc-se2.0
eclipse-core-runtime-20070801
trove-2.0.1
antisamy-1.3
javax.annotation
dojo-4342
org.json-0.0.1
castor-1.2-jdo
시도했지만 cat a.txt | tr -d "[:alpha:]-_" | less
잘못된 것 같습니다.
eg
2.1
2.4.0
1.1
1812.1.0.2 <--- wrong
2.0
20070801
2.0.1
1.3
.
4342
.0.0.1
1. <--- wrong
도움을 주시면 감사하겠습니다.
답변1
"orai18n-"과 "-se2.0"과 같은 문자열의 차이점을 알 수 있는 방법이 없기 때문에 나열한 모든 문자열을 완벽하게 일치시키는 것은 불가능합니다. 대시로 시작하는 숫자와 점의 문자열을 찾는 정규식을 생성하면 "java-se2.0" 문자열을 제외한 모든 문자열과 매우 잘 일치합니다.
sed 's/.*-\([0-9\.][0-9\.]*\).*/\1/'
(버전에 따라 sed -r을 사용하여 [0-9.]+ 사용을 허용할 수 있습니다.)
그러면 인식된 모든 버전이 추출되고 적합한 버전이 없는 곳에 전체 문자열이 표시되는 출력이 생성됩니다.
2.1
2.4.0
1.1
12.1.0.2
jdbc-se2.0
20070801
2.0.1
1.3
javax.annotation
4342
0.0.1
1.2
답변2
당신이 사용할 수있는 grep
:
grep -oP '(?<=-)([0-9]+\.?)+' a.txt
그러면 모든 버전 번호가 추출됩니다. 행에 버전이 없으면(예 javax.annotation
: ) 아무것도 인쇄되지 않습니다.
그만큼정규식:
(?<=-)
: 먼저 대시(-
)를 찾으십시오. 그러나 일치 항목의 일부가 되어서는 안 됩니다.[0-9]+
: 숫자를 검색합니다. 숫자는 적어도 한 번 또는 여러 번 나타나야 합니다.([0-9]+\.?)+
: at 점(.
)은 존재할 수도 있고 존재하지 않을 수도 있으며, 모든 것이 적어도 한 번은 발생해야 합니다.
답변3
아래의 작은 스크립트를 시도해 볼 수 있습니다.
cat a.txt | sed 's/[-/a-zA-Z]//g'