sed +는 "점 문자열" 앞에 문자열을 포함하지 않는 모든 단어를 제거합니다.

sed +는 "점 문자열" 앞에 문자열을 포함하지 않는 모든 단어를 제거합니다.

파일에서 linux/LINUX를 포함하지 않는 호스트를 제거하기 위해 다음 sed 구문을 중성화했습니다.

 sed -i '/linux\|LINUX/!d' file

linux01.moon.com
solaris.moon.com
UNIX.foot.com

그것은 줄 것이다

linux01.moon.com

하지만 이제 도메인에 Linux 이름도 포함되는 다른 경우가 있습니다.

linux01.room_linux.com
linux02.gt.com
linux03.klist.com
sol.linux.com

그것은 줄 것이다

linux01.room_linux.com
linux02.gt.com
linux03.klist.com
sol.linux.com

바꾸다

    linux01.room_linux.com
    linux02.gt.com
    linux03.klist.com

그렇다면 Linux 또는 LINUX가 포함된 경우 도메인 이름을 무시하도록 sed 구문을 어떻게 변경합니까?

답변1

패턴을 줄 시작 부분에 고정한 다음 키워드를 찾을 때까지 ^점( ) [^.]*이외의 문자 만 허용해야 합니다.

sed -E '/^[^.]*(linux|LINUX)/!d'

대체 패턴 주위에 중괄호를 추가해야 합니다. 더 읽기 쉽게 만들기 위해 대신 확장 정규식을 사용했습니다.

답변2

$ sed -e '
   h
   s/\..*//;y/linux/LINUX/;/LINUX/!d
   g
' inp.file

이것이 취할 수 있는 Posix sed 접근 방식입니다.

관련 정보