나는 파일의 목록을 가지고 있지 그 해를 다른 문자열로 바꿉니다. 이것은 테스트 케이스를 생성하는 것입니다.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 호출을 통해이 파이프를 작동시킬 수 있다는 것을 알지만 정규 표현식이 올바르게 작동해야합니까?
샘플 입력과 원하는 출력을 질문에 추가하십시오. – Cyrus
샘플 입력이 있습니다. 형식을 잘못 지정했습니다. 출력 내용을 추가하겠습니다. – Petro