![sed + 줄에서 두 번째 문자 "."를 제거하는 방법](https://linux55.com/image/56970/sed%20%2B%20%EC%A4%84%EC%97%90%EC%84%9C%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EB%AC%B8%EC%9E%90%20%22.%22%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
줄에서 두 번째 문자 "."를 제거하는 방법
내가 가진 것은 이것입니다(하지만 출력에서 첫 번째 "."를 제거합니다).
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
.
이는 ([^.]*
)가 아닌 가장 긴 세그먼트를 찾은 다음.
(\.
), 다음이 아닌 ( ) 세그먼트.
, 마지막으로.
( )를 찾습니다\.
. 괄호는 패턴을 포착하므로 이를 이라고 부를 수 있습니다\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