2017-11-16 1 views
1

나는 파일의 목록을 가지고 있지 그 해를 다른 문자열로 바꿉니다. 이것은 테스트 케이스를 생성하는 것입니다.Sed의 하나 이상의 패턴과 일치하는 것은

나는 1 년을 잘 지낼 수 있지만 그 후에는 1 ~ 2 개의 문자 조각이 나와 일치하지 않는 것 같습니다.

일해야합니까?

~/test_cases 
$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[[:alnum:]]\{1,2\}_/_YY_/' 
one_this_XXXX_YY_abc.txt 
two_that_XXXX_YY_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

2 문자의 경우를 제외하고는 예외입니다.

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[[:alnum:]]\ 
{2\}_/_YY_/' 
one_this_XXXX_1_abc.txt 
two_that_XXXX_1_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

이 중 두 개의 문자 경우에 작동하지 않습니다, 이것은 전혀 (하지만 문서가해야에 따라)하지 작동합니다

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[[:alnum:]]\+_/_YY_/' 
one_YY_XXXX_1_abc.txt 
two_YY_XXXX_1_abc.txt 
three_YY_XXXX_10.abc.txt 
four_YY_XXXX_10.abc.txt 
five_YY_XXXX_1a.abc.txt 

다른 무작위 실험 작동하지 않습니다

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[a-zA-Z0-9]\+_/_YY_/' 
one_YY_XXXX_1_abc.txt 
two_YY_XXXX_1_abc.txt 
three_YY_XXXX_10.abc.txt 
four_YY_XXXX_10.abc.txt 
five_YY_XXXX_1a.abc.txt 

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[a-zA-Z0-9]\{1\}_/_YY_/' 
one_this_XXXX_YY_abc.txt 
two_that_XXXX_YY_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

$ cat files | sed -e 's/_[[:digit:]]\{4\}_/_XXXX_/' -e 's/_[a-zA-Z0-9]\{2\}_/_YY_/' 
one_this_XXXX_1_abc.txt 
two_that_XXXX_1_abc.txt 
three_another_XXXX_10.abc.txt 
four_again_XXXX_10.abc.txt 
five_back_XXXX_1a.abc.txt 

리눅스에서 모두 GNU sed는 버전 4.2.1으로 시도와 sed Cygwin에서 아래 4.4 (GNU는 나오지도).

그리고 네, 여러 sed 호출을 통해이 파이프를 작동시킬 수 있다는 것을 알지만 정규 표현식이 올바르게 작동해야합니까?

+0

샘플 입력과 원하는 출력을 질문에 추가하십시오. – Cyrus

+0

샘플 입력이 있습니다. 형식을 잘못 지정했습니다. 출력 내용을 추가하겠습니다. – Petro

답변

0

Input_file이 표시된 샘플과 동일하면 다음과 같이하면 도움이 될 수 있습니다.

sed 's/\([^_]*\)_\([^_]*\)_\(.*_\)\(.*\)/\1_\2_XXXX_YY_\4/g' Input_file 

출력은 다음과 같습니다.

one_this_XXXX_YY_abc.txt 
two_that_XXXX_YY_abc.txt 
three_another_XXXX_YY_10.abc.txt 
four_again_XXXX_YY_10.abc.txt 
five_back_XXXX_YY_1a.abc.txt 
+0

이 정규 표현식은 변환뿐만 아니라 파일 이름 유효성 검사에도 사용되며 파일 이름은 (이 경우)보다 규칙적입니다. 나는이 특정한 경우를 해결하는 것보다 \ {1,2 \}과 \ + 비트가 잘못되어 있음을 이해하는데 더 많은 관심이 있습니다. – Petro

관련 문제