
두 번째 문자 "."를 삭제하는 방법 라인에서
내가 가진 것은 이것입니다(하지만 출력에서 첫 번째 "."를 제거합니다.
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
.
다음은 파일 줄에서 두 번째 항목을 제거하는 몇 가지 방법입니다 (파일의 모든 줄에 영향을 줍니다).
sed
. 너이미 가지고 있다아마도 가장 좋은 방법은 무엇일지 모르지만, 또 다른 방법이 있습니다:sed 's/\([^.]*\.[^.]*\)\./\1 /' file
.
이것은 비- ([^.]*
)의 가장 긴 구간을 찾은 다음, 다음 비-.
(\.
), 다음 비- 구간.
, 마지막으로 a.
( ) 를 찾습니다\.
. 괄호는 패턴을 캡처하므로 로 참조할 수 있습니다\1
. 따라서 위 명령은 두 번째 항목을 삭제.
하고 공백으로 바꿉니다.sed
GNU (Linux의 기본값) 가 있는 경우 다음과 같이 단순화할 수 있습니다.sed -r 's/([^.]*\.[^.]*)\./\1 /' file
펄
perl -pe 's/([^.]*\.[^.]*)\./\1 /' file
또는
perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file
awk
(더 좋은 방법이 있을 거라고 확신해요)awk -F. '{printf "%s.%s ",$1,$2; for(i=3;i<NF;i++){printf "%s.",$(i); }print $NF}' file