KSH에서 "12345"를 "1.2.3.4.5"로 변환하는 방법


-1

KSH를 사용하면 문자열 12345이 있고 변환하려고 할 때 1.2.3.4.5어떻게 할 수 있습니까?

나는 사용하려고 시도했지만 cut간단하지가 않습니다.

echo "12345" | cut -c1

2
좀 더 구체적이어야합니다. 뭐하고 싶어? 변수에 두 자리의 모든 조합 사이에 마침표를 넣으시겠습니까? 파일의 모든 줄마다 두 문자 사이에 마침표를 넣으시겠습니까? 분리되지 않은 숫자로 구성된 표준 입력의 모든 행의 처음 네 문자 뒤에 마침표를 넣으시겠습니까? 기타 ...
— SadBunny

정확한 버전 번호를 제공하기 위해 답변을 편집 해 주실 수 있습니까 ksh? 당신은 ksh솔라리스 에서이 주석에 대해 언급 하지만 정확한 버전은 ksh무엇입니까?
— JakeGould

답변:


2

필수 awk답변 :

echo "12345" | awk '$1=$1' FS= OFS="."

출력은 다음과 같습니다.

1.2.3.4.5

이 스택 오버플로 게시물 의 솔루션 중 하나에서 응답이 수정됩니다 .


좋은 awk해결책.
— JakeGould

솔라리스에서 해보았을 때 nawk 또는 / usr / xpg4 / bin / awk를 사용해야한다는 것을 알았습니다. 그렇지 않으면 아래와 같은 오류 메시지가 나타납니다. # echo "12345"| awk '$ 1 = $ 1'FS = OFS = "." awk : 줄 1 근처에서 구문 오류 awk : 줄 1에서 빠져 나오기
— robin

그런 다음 # echo "12345"를 사용하려고했습니다. / usr / xpg4 / bin / awk '$ 1 = $ 1'FS = OFS = "."그러나 결과는 예상 한 것 이외의 12345입니다. 1.2.3.4.5 조언 할 수 있습니까? 감사!
— 로빈

미안, 나도 몰라. Awk 구문은 버전간에 상당히 까다 롭습니다. 행운을 빕니다 nawk. 나는 이것이 BSD awk에서 작동 하지만 GNU에서는 작동 하지 않는다는 것을 발견했다 awk.
— Caleb Xu

nawk에 대해서도 같은 결과가 나타납니다. 사실, 다른 방법을 찾아 냈습니다. echo "1234"| sed의 / (. \ {1 \}) / \ 1. / g '. 그러나 결과는 "1.2.3.4"입니다. 나는 마지막을 제거해야합니다. 그래서 전체 명령 줄은 다음과 같습니다 : # temp_str = echo "1234" | sed 's/\(.\{1\}\)/\1./g'# echo "$ {temp_str %?}"
— robin

1

Perl 정규 표현식 (조회 및 ​​역 참조 포함)은 모든 것을 모든 것, 즉 마지막 점을 제외하고 점으로 대체하는 답입니다 (문제의 가정이라고 가정).

$ echo "12345" | perl -wlpe 's/(.(?=.))/$1\./g'
1.2.3.4.5

이건 대단해! 그러나, 나는 awk 또는 seed
— robin으로

0

OpenSolaris에서 ksh 및 / usr / bin / sed로 테스트 한 sed 솔루션

echo "12345" | /usr/bin/sed -e 's/./&\./g' -e 's/\.$//'

-1

이것은 효과가있다. 테스트 bash및 ksh맥 OS X에서 :

echo "12345" | sed 's/\(.\{1\}\)/\1./g' | rev | cut -c 2- | rev

출력은 다음과 같습니다.

1.2.3.4.5

그리고 명령의 붕괴는 이렇게됩니다 :

  • 은 echo분명하다.
  • 이 sed문자열은 문자열을 문자열로 분리 한 다음 .각 문자 사이에 문자열을 추가 합니다.
  • rev 문자열을 뒤집습니다.
  • cut문자 위치에 따라 문자열을 자른다. 이것은 2내가 믿는 개행으로 인한 것이다.
  • rev 되돌려 진 문자열을 초기 순서대로 되 돌린다.

1
내 Solaris Ksh에서는 rev가 작동하지 않는 것 같습니다. 이 대답은 나에게 힌트를주고 마침내 나는 내 문제를 해결했다. 위의 의견을 참조하십시오
— 로빈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.