我有一个文件,我将拥有IP地址和服务器FQDN名称。
示例文件
192.168.1.1
192.168.2.1
kubuntu1.example.com
kubuntu2.example.com
我想写一个shell脚本,我想获得没有域名的IP地址服务器名称的输出
如果文件有数字则不做任何事情 否则,如果它有字母,那么得到像
的输出192.168.1.1
192.168.2.1
kubuntu1
kubuntu2
提前感谢您的帮助。
shell脚本新手,所以对正则表达式不太确定。
答案 0 :(得分:1)
您可以使用sed
。像这样:
sed 's/\([a-z][^.]*\).*/\1/' input.file
<强>解释强>
我使用s
(替代)命令来&#34;切断&#34;第一个点(包括点)后面的所有内容都以小写字母开头:
s The substitute command
/\([a-z][^.]*\).*/ Search pattern
\1 The replacement pattern.
/ End of s command
搜索模式解释
/ Starting Delimiter
\( Start of capturing group
[a-z] A lowercased character
[^.]* Zero or more non . characters
\) End of capturing group
.* Rest of the line
/ Ending delimiter
替换模式只是注入第一个捕获组\1
的内容。
顺便说一句,如果你没有沉迷于像我这样输入神秘字符,你可以将-r
选项传递给sed
。拥有这个通常可以保存大部分转义,命令看起来更清晰:
sed -r 's/([a-z][^.]*).*/\1/' input.file
通常,域名不会包含大写字符,但是猪可以飞...为了确保您也可以捕获以大写字符开头的域名,您应该更改
[a-z]
到
[a-zA-Z]
答案 1 :(得分:1)
您可以使用此awk
命令:
awk -F '\\.' '!($1+0){$0=$1} 1' file
192.168.1.1
192.168.2.1
kubuntu1
kubuntu2
<强>解释强>
-F '\\.' # set input field separator as . (DOT)
!($1+0) # check if first field is numerically equal to zero (to catch non numeric)
$0=$1 # if yes then set record = first file
1 # default awk action to print whole line