다음 명령의 의미를 찾으려고합니다.
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)