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

이것은 효과가있다. 테스트 bashksh맥 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.