所以有一个应用程序可以告诉我当前的IP是什么。输出是:
,而不仅仅是打印IPStarting GetIP process...
Getting your IP...
Your current IP: 127.0.0.1
有没有办法将IP保存到文件中?通过删除前2行和第3行的开头,或者只保存实际的数字和点。
我知道我可以使用sed
减少前两行,但如何删除第三行的文字? (顺便说一下,预期的输出只是IP,没有冒号或空格)。
答案 0 :(得分:3)
您可以使用awk
轻松完成此操作:
$ your_command | awk 'END{print $NF}'
127.0.0.1
要存储到文件,请使用重定向运算符:
$ your_command | awk 'END{print $NF}' > my_ip
在awk
中,在读取输入后执行END
块,以便我们查看输入中的最后一行。 NF
是一个特殊的awk
变量,它包含当前行上的字段数(在本例中为4),其中默认字段分隔符为空格。 $
表示打印字段值,即{print $1}
打印第二个字段的第一个字段值$2
。
sed
的一种方式:
$ your_command | sed -n '3s/.*: //p'
127.0.0.1
# save to file
$ your_command | sed -n '3s/.*: //p' > my_ip
选项-n
关闭每行的默认打印。 3
是我们要操作的行的地址(行号)。我们想要对冒号后跟空格.*
的所有:
执行替换(s命令),并将其替换为空字符串。正斜杠是选定的分隔符,p
是打印命令,因此在替换发生后只打印第三行。
使用grep
和-o
选项,您可以打印给定IP匹配正则表达式的所有匹配项:
$ your_command | egrep -o '([0-9]{1,3}[.]){3}[0-9]{1,3}$'
# save to file
$ your_command | egrep -o '([0-9]{1,3}[.]){3}[0-9]{1,3}$' > my_ip
Linux上的最佳解决方案是使用hostname
:
$ hostname -I
127.0.0.1
# save to file
$ hostname -I > my_ip
但这不可移植,因为-I
选项可用于hostname
命令的OSX版本。