使用shell脚本检查Numeric和Alphabet的输出

时间:2015-02-17 15:00:13

标签: bash shell

我有一个文件,我将拥有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脚本新手,所以对正则表达式不太确定。

2 个答案:

答案 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