주어진 줄의 -(빼기) 기호를 텍스트가 아닌 숫자로만 바꿔야 합니다.

주어진 줄의 -(빼기) 기호를 텍스트가 아닌 숫자로만 바꿔야 합니다.

<;|구분 기호가 다음과 같은 입력이 있습니다 .

1-<;|3-Text <;|3.13-<;|0.28-<;|9
0.12-<;|2-Text <;|3.99-<;|4.11-<;|6
0.13-<;|3-Text <;|8.13-<;|3.98-<;|3

내 예상 결과는 다음과 같습니다.

-1<;|3-Text <;|-3.13<;|-0.28<;|9 
-0.12<;|2-Text <;|-3.99<;|-4.11<;|6
-0.13<;|3-Text <;|-8.13<;|-3.98<;|3

여기서는 텍스트 필드가 아닌 정수 또는 소수 값 앞에만 빼기 기호를 추가하고 싶습니다. 열은 고정되어 있지 않으며 어떤 순서로도 가능합니다. sed명령을 사용하려고 하는데 성공하지 못했습니다. 이 상황에서 나를 도와주세요.

답변1

GNU sed 사용:

sed 's/\([[:digit:]]\+\)\(\.[[:digit:]]*\)\{0,1\}-\(\W\)/-\1\2\3/g'

와 뒤에 "단어가 아닌" 문자를 sed일치시키려면 GNU 버전이 필요합니다 . GNU가 아닌 버전을 사용하여 이를 시뮬레이션할 수 있습니다 .-\W[^a-zA-Z0-9_]

-이전 패턴에 공백을 추가하는 대신 공백 앞에 오는 경우 변경해서는 안 되는 경우 다음과 같이 하십시오 .

sed 's/\([[:digit:]]\+\)\(\.[[:digit:]]*\)\{0,1\}-\([^a-zA-Z0-9_ ]\)/-\1\2\3/g'

관련 정보