파일의 버전 번호를 일치시키는 가장 좋은 방법은 무엇입니까

파일의 버전 번호를 일치시키는 가장 좋은 방법은 무엇입니까

파일의 특정 버전 번호(또는 개정 번호)를 일치시키는 가장 좋은 방법은 무엇입니까

몇 가지 선택을 했지만 다른 최선의 방법이 있다고 생각합니다(예: Perl one-liner)

   version=23.092.12
   cat generic_version | grep  "$version"
   cat generic_version | grep -F "$version"
   cat generic_version | awk -v ver=$version '/ver/'

일반 버전 - 많은 부동 버전을 포함하는 파일입니다.

cat /tmp/generic_version | ......

예상 결과:

23.092.12 # version approve 

파일 예

23.087.23  # version approve 
23.092.12  # version approve 
23.098.45  # version approve 
23.099.12  # version under testing

답변1

최소한 23.092.123 또는 1.23.092.12와 같은 일치를 피하기 위해 숫자 앞이나 뒤에 점 없이 일치시키는 것이 좋습니다 (물론 , , .. $version도 고려해 볼 수도 있음 ). 더 쉬울 수도 있습니다 .23.092.12-rc123.092.12b23.092.12-2perl

<generic_version V=$version perl -ne 'print if m{(?<![\d.])\Q$ENV{V}\E(?![\d.])}'

성냥:

xxx 23.092.12 yyy
xxx23.092.12yyy
23.092.12-pre1

하지만 위에는 없어

23.092.12.2
23.092.123
123.092.12
23.092.12.

및 각각 역방향 탐색 및 정규식 연산자입니다. 환경 변수의 내용이 정규 표현식이 아닌 고정 문자열로 처리되도록 사용합니다(따라서 (?<!...)문자 일치라는 특별한 의미를 잃습니다).(?!...)\Q...\E.

편집 내용에 따라 입력 파일의 버전 번호가 항상 줄의 시작 부분에 있고 항상 공백 문자가 뒤에 오는 경우 이를 다음과 같이 단순화할 수 있습니다.

<generic_version V=$version perl -ne 'print if m{^\Q$ENV{V}\E\s}'

또는 awk첫 번째 필드가 버전인 행을 일치시키려면 다음을 수행하십시오.

<generic_version V=$version awk '$1 "" == ENVIRON["V"]'

""문자열 비교를 강제하기 위해 연결이 수행됩니다 . 그것 없이는 좋아요를 누르면 $version일치 123.4할 것입니다 123.40.

$version입력에서 공백으로 구분된 필드를 일치시키려면 다음을 수행하십시오 .

<generic_version V=$version perl -ne 'print if m{(?<!\S)^\Q$ENV{V}\E(?!\S)}'

전제는 $version앞뒤에 공백이 아닌 문자( )가 없다는 것입니다 \S.

답변2

Awk해결 방법(입력 파일 형식에 따라 다름):

version="23.092.12"
awk -v ver="$version" '$1 == ver' /tmp/generic_version

산출:

23.092.12  # version approve 

답변3

파일의 generic_version줄당 버전 번호가 포함되어 있고 $version다음 줄 중 하나와 정확히 일치할 수 있다고 가정합니다.

grep -xF "$version" generic_version

-F플래그를 사용하면 grep패턴이 정규식이 아닌 고정 문자열로 해석되는 동시에 -x일치 항목이 전체 줄에 걸쳐 적용됩니다(정규식 패턴에서 및 가 사용된 것처럼 ^).$


문제의 파일 형식을 공개한 후:

awk -v v="$version" '$1 == v' generic_version

version그러면 공백으로 구분된 첫 번째 열이 변수 값과 동일한 파일의 모든 줄이 출력됩니다 .

관련 정보