![sed 또는 awk를 사용하여 음수 형식을 다시 지정합니다.](https://linux55.com/image/89140/sed%20%EB%98%90%EB%8A%94%20awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%8C%EC%88%98%20%ED%98%95%EC%8B%9D%EC%9D%84%20%EB%8B%A4%EC%8B%9C%20%EC%A7%80%EC%A0%95%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음 형식을 제외하고 일부 음수가 포함된 텍스트 파일이 있습니다.
00000012-
숫자 뒤에는 하이픈이 옵니다.
awk를 사용하여 파일을 처리하여 SQL 삽입 명령으로 다시 포맷하고 있지만 숫자 뒤에 빼기 기호가 나타나기 때문에 SQL 해석기가 숫자를 질식시킵니다.
숫자 앞의 음수 기호를 이동하는 정규식이 있습니까?
답변1
그리고 sed
:
echo 00000012- | sed -e 's/\([0-9]+\)\(-\)\?/\2\1/'
주어진 -00000012
.
즉, 두 세트를 일치시킵니다. 첫 번째는 숫자로, 두 번째는 기호로 일치하지만 0개 이상의 일치 항목을 사용합니다.저것을 선택한 다음 두 개를 교환합니다.
답변2
대신 SQL을 사용하여 문제를 해결하세요.
create table #Tempt (Value VarChar(100))
Insert Into #Tempt Values(NULL)
Insert Into #Tempt Values('500.1-')
Insert Into #Tempt Values('-500.1')
Insert Into #Tempt Values('20.5')
select *, case when Value like '%-' then '-' + replace(value,'-',') else value end
From #Tempt
그런 다음 대량 삽입을 사용하여 #Tempt
실제 테이블에서 값을 가져옵니다.
에서 가져옴음수 값을 일괄 삽입.
왜 사람들은 항상 프로그래머가 이런 어리석은 일을 정리할 것이라고 기대합니까?
당신은 유일한 사람이 아닙니다 ...
답변3
sed를 사용하세요:
sed -e 's/\<\([0-9.]\+\)-/-\1/g'
또는
sed -E -e 's/\<([0-9+]+)-/-\1/g'
GNU awk 사용:
awk '{$0=gensub(/\<([0-9.]+)-/,"-\\1","g"); print }'
참고: 실행하려면 GNU awk가 필요합니다 gensub()
. 그룹 캡처 도 sub()
지원 되지 않습니다.gsub()
펄 사용:
perl -p -e 's/\b([\d.]+)-/-$1/g'