이 파이프라인에서 내 문자열이 변경되는 이유는 무엇입니까?

이 파이프라인에서 내 문자열이 변경되는 이유는 무엇입니까?

출력 URL을 명령에 연결하려고 시도했지만 opengrep의 색상 설정을 변경하거나 또는 같은 다른 유틸리티를 통해 출력을 추가로 연결했음에도 불구하고 여전히 출력에 특수 문자가 있는 awk여러 인스턴스를 발견했습니다. cut다음과 같이:

여기에 이미지 설명을 입력하세요.

처음 두 번 open명령을 실행했을 때 다음 두 URL을 받았습니다.

여기에 이미지 설명을 입력하세요. 여기에 이미지 설명을 입력하세요.

파이프로 연결되거나 색상 설정이 변경된 경우에도 URL에 특수 문자가 추가되는 것을 볼 수 있습니다. 이는 다음 명령으로 확인할 수 있습니다 od.

➜  ~  apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
           1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
           75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
0000040    m   o   d   e esc   [   2   4   m  nl
           6d  6f  64  65  1b  5b  32  34  6d  0a

 ➜  ~  apm show vim-mode | grep --color=none https | cut -d' ' -f2 | od -atx1
 0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
            1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
 0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
            75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
 0000040    m   o   d   e esc   [   2   4   m  nl
            6d  6f  64  65  1b  5b  32  34  6d  0a
 0000052

다음 두 출력은 awkURL을 제거 하려고 시도 apm하지만 특수 문자도 도입한 다음 open명령이 해당 URL을 파일로 열려고 시도합니다. 이는 다음을 통해 확인되었습니다 od.

➜  ~  apm show vim-mode | awk -F' ' '/http/ {print $2}' | od -atx1
0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
           1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
           75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
0000040    m   o   d   e esc   [   2   4   m  nl
           6d  6f  64  65  1b  5b  32  34  6d  0a

해결책은 사랑스러운sed oneliner, sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"모든 특수 문자를 성공적으로 제거합니다. 마지막 명령은 이 oneliner를 사용하고 open예상대로 성공적으로 진행됩니다. https://github.com/atom/vim-mode이는 확인되었습니다 od.

➜  ~  apm show vim-mode | awk -F' ' '/http/ {print $2}' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | od -atx1
0000000    h   t   t   p   s   :   /   /   g   i   t   h   u   b   .   c
           68  74  74  70  73  3a  2f  2f  67  69  74  68  75  62  2e  63
0000020    o   m   /   a   t   o   m   /   v   i   m   -   m   o   d   e
           6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d  6d  6f  64  65
0000040   nl
           0a
0000041

따라서 몇 가지 질문이 남습니다.

  1. 왜 작동하지 않습니까 grep --color=none?
  2. 다양한 기타 유틸리티에 특수 문자가 추가되는 이유는 무엇입니까?

나는 이것이 내 쉘 설정과 관련이 있다고 생각합니다. 나는 그것을 사용하고 있다그리고요점주제

편집하다

설정이 TERM=dumb효과가 없는 것 같습니다.

➜  github-application master ✓ diff <(TERM=dumb apm show vim-mode | od -atx1) <(apm show vim-mode | od -atx1)
➜  github-application master ✓

설정 NPM_CONFIG_COLOR=false도 영향을 미치지 않는 것 같습니다.

➜  ~/w/s/g/m/todo master ✓ diff <(NPM_CONFIG_COLOR=false apm show vim-mode | od -atx1) <(apm show vim-mode | od -atx1)
➜  ~/w/s/g/m/todo master ✓

URL에 밑줄이 있어서 그런 것 같아요. 좀 더 자세히 알아봤는데요또 다른 문제

답변1

로 특수문자를 삽입한 것 같습니다 apm.

➜  ~  apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
           1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
           75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
0000040    m   o   d   e esc   [   2   4   m  nl
           6d  6f  64  65  1b  5b  32  34  6d  0a

 ➜  ~  apm show vim-mode | grep --color=none https | cut -d' ' -f2 | od -atx1
 0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
            1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
 0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
            75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
 0000040    m   o   d   e esc   [   2   4   m  nl
            6d  6f  64  65  1b  5b  32  34  6d  0a
 0000052

➜  ~  apm show vim-mode | od -atx1
0000000  esc   [   3   6   m   v   i   m   -   m   o   d   e esc   [   3
           1b  5b  33  36  6d  76  69  6d  2d  6d  6f  64  65  1b  5b  33
0000020    9   m  nl   �  94  9c   �  94  80   �  94  80  sp esc   [   3
           39  6d  0a  e2  94  9c  e2  94  80  e2  94  80  20  1b  5b  33
0000040    3   m   0   .   6   5   .   1 esc   [   3   9   m  nl   �  94
           33  6d  30  2e  36  35  2e  31  1b  5b  33  39  6d  0a  e2  94
0000060   9c   �  94  80   �  94  80  sp esc   [   4   m   h   t   t   p
           9c  e2  94  80  e2  94  80  20  1b  5b  34  6d  68  74  74  70
0000100    s   :   /   /   g   i   t   h   u   b   .   c   o   m   /   a
           73  3a  2f  2f  67  69  74  68  75  62  2e  63  6f  6d  2f  61
0000120    t   o   m   /   v   i   m   -   m   o   d   e esc   [   2   4
           74  6f  6d  2f  76  69  6d  2d  6d  6f  64  65  1b  5b  32  34
0000140    m  nl   �  94  9c   �  94  80   �  94  80  sp   A   d   d  sp
           6d  0a  e2  94  9c  e2  94  80  e2  94  80  20  41  64  64  20
0000160    v   i   m  sp   m   o   d   a   l  sp   c   o   n   t   r   o
           76  69  6d  20  6d  6f  64  61  6c  20  63  6f  6e  74  72  6f
0000200    l  nl   �  94  9c   �  94  80   �  94  80  sp   5   0   3   8
           6c  0a  e2  94  9c  e2  94  80  e2  94  80  20  35  30  33  38
0000220    6   1  sp   d   o   w   n   l   o   a   d   s  nl   �  94  94
           36  31  20  64  6f  77  6e  6c  6f  61  64  73  0a  e2  94  94
0000240    �  94  80   �  94  80  sp   1   0   1   4  sp   s   t   a   r
           e2  94  80  e2  94  80  20  31  30  31  34  20  73  74  61  72
0000260    s  nl  nl   R   u   n  sp   `   a   p   m  sp   i   n   s   t
           73  0a  0a  52  75  6e  20  60  61  70  6d  20  69  6e  73  74
0000300    a   l   l  sp   v   i   m   -   m   o   d   e   `  sp   t   o
           61  6c  6c  20  76  69  6d  2d  6d  6f  64  65  60  20  74  6f
0000320   sp   i   n   s   t   a   l   l  sp   t   h   i   s  sp   p   a
           20  69  6e  73  74  61  6c  6c  20  74  68  69  73  20  70  61
0000340    c   k   a   g   e   .  nl  nl
           63  6b  61  67  65  2e  0a  0a
0000350

e esc [ 2 4특정 관심 분야 입니다 .

이는 bash로 전환하고 동일한 결과를 얻으면 확인할 수 있습니다.

bash-3.2# apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000  esc   [   4   m   h   t   t   p   s   :   /   /   g   i   t   h
           1b  5b  34  6d  68  74  74  70  73  3a  2f  2f  67  69  74  68
0000020    u   b   .   c   o   m   /   a   t   o   m   /   v   i   m   -
           75  62  2e  63  6f  6d  2f  61  74  6f  6d  2f  76  69  6d  2d
0000040    m   o   d   e esc   [   2   4   m  nl
           6d  6f  64  65  1b  5b  32  34  6d  0a

팁을 주신 @muru에게 감사드립니다!

관련 정보