<;|
구분 기호가 다음과 같은 입력이 있습니다 .
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'