![sed 또는 awk를 사용하여 음수 형식 변경](https://rvso.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%20%EB%B3%80%EA%B2%BD.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 }'
참고: gensub()
기능을 위해서는 GNU awk가 필요합니다. 캡처 그룹도 지원하지 sub()
않습니다 .gsub()
펄을 사용하면:
perl -p -e 's/\b([\d.]+)-/-$1/g'