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 
    

    .이것은 비- ( [^.]*)의 가장 긴 구간을 찾은 다음, 다음 비- .( \.), 다음 비- 구간 ., 마지막으로 a .( ) 를 찾습니다 \.. 괄호는 패턴을 캡처하므로 로 참조할 수 있습니다 \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 
    

관련 정보