sed + 줄에서 두 번째 문자 "."를 제거하는 방법

sed + 줄에서 두 번째 문자 "."를 제거하는 방법

줄에서 두 번째 문자 "."를 제거하는 방법

내가 가진 것은 이것입니다(하지만 출력에서 ​​첫 번째 "."를 제거합니다).

uname -r | sed s'/\./ /'

2 6.18-164.2.1.el5PAE

다음 출력이 필요하지만

2.6 18-164.2.1.el5PAE

답변1

다음과 같이 N번째 항목과 일치하도록 명령 끝에 N을 추가하면 됩니다.

uname -r | sed 's/\./ /2'

왜 필요한가요?


info페이지 에서 sed:

`s' 명령 뒤에는 다음 플래그 중 0개 이상이 올 수 있습니다:

G

Apply the replacement to _all_ matches to the REGEXP, not just the first.

숫자

Only replace the NUMBERth match of the REGEXP.

답변2

.다음은 파일의 한 줄에서 두 번째 줄을 제거하는 몇 가지 방법입니다(파일의 모든 줄에 영향을 미침).

  1. sed. 너이미 가지고 있다아마도 가장 좋은 방법은 무엇입니까? 그러나 다른 방법은 다음과 같습니다.

    sed 's/\([^.]*\.[^.]*\)\./\1 /' file 
    

    .이는 ( [^.]*)가 아닌 가장 긴 세그먼트를 찾은 다음 .( \.), 다음이 아닌 ( ) 세그먼트 ., 마지막으로 .( )를 찾습니다 \.. 괄호는 패턴을 포착하므로 이를 이라고 부를 수 있습니다 \1. 따라서 위 명령은 두 번째 명령을 제거 .하고 공백으로 바꿉니다.

    sedGNU (Linux의 기본값) 가 있는 경우 다음과 같이 단순화할 수 있습니다.

    sed -r 's/([^.]*\.[^.]*)\./\1 /' file 
    
  2. perl -pe 's/([^.]*\.[^.]*)\./\1 /' file 
    

    또는

    perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file 
    
  3. awk(더 좋은 방법이 있을 거라 확신합니다)

    awk -F. '{printf "%s.%s ",$1,$2; for(i=3;i<NF;i++){printf "%s.",$(i); }print $NF}' file 
    

관련 정보