sed 's/-\([0-9.]\+\)/(\1)/g' inputfile 이 명령은 무엇을 의미합니까? [폐쇄]

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile 이 명령은 무엇을 의미합니까? [폐쇄]

다음 명령의 의미를 찾으려고합니다.

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

나는 이것이 숫자가 아닌 문자와 관련이 있다는 것을 알고 있습니다.

답변1

GNU sed에서는 대시 뒤에 숫자나 점이 오는 것을 찾아 괄호 안에 같은 숫자로 바꿉니다. 즉, 가 -123.45되었습니다 (123.45).

macOS의 BSD 기반 시스템과 같은 일부 다른 sed시스템에서는 대시, 숫자 또는 점, 문자 그대로의 더하기 기호를 찾은 다음 대시를 제거하고 나머지를 괄호로 묶습니다. 즉, 그것은 가 되지만 -1+있는 것은 (1+)남겨둔다 .-123


차이점은 \+기본 정규식에는 표준 의미가 없기 때문입니다. GNU는 이를 확장 정규 표현식과 동일하게 해석합니다 +(즉, "이전 하나 이상"). 반면 다른 사람들은 이를 문자 그대로 받아들입니다 +.

왼쪽 패턴의 나머지 부분은 대시 자체가 일치하고 [0-9.]숫자나 점과 일치하며 \( .. \)중간 부분을 캡처합니다. 대신 괄호는 문자 그대로 사용되며 \1안에 있는 내용은 모두 다시 넣어집니다 \( .. \).

휴대성이 좋아야 합니다.

  • 확장 RE에서는 sed이를 지원한다고 가정하면 -E많은 사람들이 다음과 같이 합니다.

    sed -E 's/-([0-9.]+)/(\1)/' 
    
  • 기본 RE에서:

    sed 's/-\([0-9.]\{1,\}\)/(\1)/' 
    

둘 다 숫자 앞의 대시를 괄호로 바꿔야 합니다.

답변2

음수의 형식이 -앞에 1이 있는 것에서 괄호로 묶는 것으로 변경된 것 같습니다.

로 시작하는 시퀀스를 검색 한 다음 숫자 및 소수 와 일치하는 -일련의 숫자 및 소수를 검색하고 시퀀스에서 하나 이상의 해당 문자와 ​​일치하도록 수정합니다. 숫자와 소수의 순서는 첫 번째 표현식인 에 들어가고, 교체 절에서는 사이에 첫 번째 표현식이 붙여져 있습니다 . 최종 결과는 숫자 앞의 음수 기호를 제거하고 괄호로 묶는 것입니다.[0-9.]\+\(...\)(\1)()

따라서 다음을 입력하십시오.

test value: -123.4

출력은 다음 형식이어야 합니다.

test value: (123.4)

관련 정보