파일에서 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 접근 방식입니다.