我阉割了以下 sed 语法,以便从文件中删除任何不包含 linux/LINUX 的主机
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 方法。