sed는 왼쪽에 0으로 채워진 숫자의 모든 항목을 내장된 빼기 기호 "-"로 대체하여 빼기 기호가 왼쪽에 있도록 합니다.

sed는 왼쪽에 0으로 채워진 숫자의 모든 항목을 내장된 빼기 기호 "-"로 대체하여 빼기 기호가 왼쪽에 있도록 합니다.

탭으로 구분된 입력 파일이 있습니다. 일부 숫자 필드 값에는 값 중간에 빼기 기호가 있습니다(예: ) 000-45.123. 나는 -다음과 같이 왼쪽에 있어야합니다 : -00045.123

따라서 탭으로 구분된 입력 파일에 다음이 포함된 경우: (공백은 탭입니다)

ABC 000-45.123 0-765.43 DEF 00-54 XYZ

그럼 내가 원하는 결과는

ABC -00045.123 -0765.43 DEF -0054 XYZ

"-"가 포함된 모든 숫자 값은 하나 이상의 0으로 시작하고 다른 문자는 없습니다.

참고: 사용 가능한 옵션이 없습니다: sed -r 또는 sed -E

답변1

GNU sed 사용:

숫자 및 빼기 기호에서 빼기 기호 및 숫자로 순서를 변경합니다.

sed -r 's/([0-9]+)(-)/\2\1/g' file

산출:

ABC -00045.123 -0765.43 DEF -0054 XYZ

바라보다:스택 오버플로 정규식 FAQ

답변2

POSIX적으로:

TAB=$(printf '\t')
sed "s/^\(00*\)-/-\1/;s/${TAB}\(00*\)-/$TAB-\1/g"

00-첫 번째 필드( 줄 시작 부분) 또는 다른 필드( 00-TAB 뒤) 의 두 가지 경우를 고려해야 합니다 .

sed구현 지원 -E(확장 정규 표현식용) 및 셸 지원 $'...'(모두 POSIX 사양의 향후 버전이 될 가능성이 높음)을 사용하면 이를 다음과 같이 단순화할 수 있습니다.

sed -E $'s/(^|\t)(0+)-/\1-\2/g'

대신에.

관련 정보