적절한 정규식을 사용하여 sed에서 패턴을 찾는 방법은 무엇입니까?

적절한 정규식을 사용하여 sed에서 패턴을 찾는 방법은 무엇입니까?

다음과 같은 정보 세트가 포함된 파일이 있습니다.

cat filename
    1   S121
    2   M121
    3   MS121
    4   SM154
    5   SM91 

[mM] to MS나는 같은 패턴을 유지하는 것들만 바꾸려고 노력했다 . sed script다음을 시도했습니다.

sed -r 's/ms?([0-9])/MS\1/Ig' filename

그러나 이는 [mM]에만 국한된 것이 아니며 행 4와 5는 다음과 같이 변경될 수 있습니다.

4       SMS154
5       SMS91

도움을 주시면 감사하겠습니다. 천만에요!

답변1

다음에서 시작하는 하위 문자열과 일치합니다."쌀",선택적으로이어서"에스", 그 뒤에 숫자가 옵니다.[0-9].

4행과 5행의 텍스트에는 다음 하위 문자열도 포함되어 있습니다.

4SM154

5SM91

그래서 그들은 교체되었습니다.

패턴에 접두사를 추가해 보세요."\에스"다음과 같이 열 2의 접두사에만 관심이 있음을 나타냅니다.

sed -r 's/(\s)ms?([0-9])/\1XX\2/Ig'

답변2

이건 어때? 귀하의 질문이 맞습니까?

sed -r 's/m([^s])/MS\1/Ig' file

관련 정보