일치하는 정규식에 접미사를 추가하면 작동하지 않습니다.

일치하는 정규식에 접미사를 추가하면 작동하지 않습니다.

내 번호 목록은 다음과 같습니다.

46066.874.89
48569.123.56
56489.256.88
654.12.32
84689.25.69

내 목표는 끝에 두 개의 0을 추가하는 것입니다 654.12.32. 하지만 어떤 이유로든 둘 다

sed -E 's/(\.[0-9][0-9])$/\100/' file

...도 아니다

sed -E 's/(\.[0-9][0-9]) *$/\100/' file

일하다. 입력과 정확히 동일한 출력을 얻습니다. 여기서 무슨 일이 일어나고 있는지 아는 사람 있나요?

이것은 기본적으로 제가 어제 받은 또 다른 질문에 대한 후속 조치입니다(일치하는 정규식에 접미사 추가), 그러나 그것은 주제에서 약간 벗어나 새로운 질문을 제기합니다.

편집: 이것은 내가 사용할 때 od -cb file얻는 결과입니다 .

0000000   4   6   0   6   6   .   8   7   4   .   8   9  \r  \n   4   8
        064 066 060 066 066 056 070 067 064 056 070 071 015 012 064 070
0000020   5   6   9   .   1   2   3   .   5   6  \r  \n   5   6   4   8
        065 066 071 056 061 062 063 056 065 066 015 012 065 066 064 070
0000040   9   .   2   5   6   .   8   8  \r  \n   6   5   4   .   1   2
        071 056 062 065 066 056 070 070 015 012 066 065 064 056 061 062
0000060   .   3   2  \r  \n   8   4   6   8   9   .   2   5   .   6   9
        056 063 062 015 012 070 064 066 070 071 056 062 065 056 066 071
0000100  \r  \n
        015 012
0000102

하지만 이것을 어떻게 설명해야 할지 모르겠습니다. 캐리지 리턴이 활성화된 경우 이 문제를 해결하는 방법은 무엇입니까?

답변1

[0-9]줄 끝에서 일치시키려고 했으나 입력이 [0-9]줄 끝에 있지 않고 모든 줄이 로 끝나기 때문에 실패합니다. [0-9]\r대신 regex 를 사용하여 /...[0-9]\r$/정규식 일치를 만들 수 있습니다 ...[0-9]$/. 바라보다도구 출력이 자체적으로 덮어쓰이는 이유는 무엇이며 어떻게 해결합니까? noredirect=1#comment97778025_45772525DOS 라인 엔딩에 대한 추가 정보.

다음은 UNIX 줄 종결자만 처리하고 DOS 줄 종결자만 처리하고 두 가지 모두를 처리하는 방법입니다.

$ printf '654.12.32\n' | cat -v
654.12.32

$ printf '654.12.32\r\n' | cat -v
654.12.32^M

$ printf '654.12.32\n' | sed -E 's/\.([0-9][0-9])$/\100/' | cat -v
654.123200

$ printf '654.12.32\r\n' | sed -E 's/\.([0-9][0-9])$/\100/' | cat -v
654.12.32^M

$ printf '654.12.32\r\n' | sed -E 's/\.([0-9][0-9])\r$/\100/' | cat -v
654.123200

$ printf '654.12.32\r\n' | sed -E 's/\.([0-9][0-9])(\r?)$/\100\2/' | cat -v
654.123200^M

$ printf '654.12.32\n' | sed -E 's/\.([0-9][0-9])(\r?)$/\100\2/' | cat -v
654.123200

답변2

내가 올바르게 이해했다면 다음과 같이 작동할 수 있습니다.

sed -E 's/^(.{3}\..{2}\..{2})$/\100/' file

산출:

46066.874.89
48569.123.56
56489.256.88
654.12.3200
84689.25.69

정규식이 일치하기 때문에 작동하지 않습니다.

46066.874.89
48569.123.56
56489.256.88
654.12.32
84689.25.69

따라서 출력은 다음과 같습니다.

46066.874.8900
48569.123.5600
56489.256.8800
654.12.3200
84689.25.6900

관련 정보