我有一个日志文件,我们在错误的地方获取ip地址。
cat test.sh
173.36.31.10 dasdsafafa fafsafaasfa fafasfaa173.36.31.10
173.36.31.11 dasdsafafa fafsafaasfa fafasfaa173.36.31.11如果你看到我上面的脚本,它有两个ip地址,这在我的情况下是错误的。我想写一个脚本,删除第二个id地址。
我正在考虑通过这样做来获得cat test.sh | awk '{print $1}' ip地址,但我不确定如何删除第二个ip地址。
我想同时使用shell和python,有人能帮我吗?
我很感谢你的帮助。
发布于 2015-05-13 09:59:46
使用此文件作为测试文件:
$ cat test.sh
173.36.31.10 dasdsafafa fafsafaasfa fafasfaa173.36.31.10
173.36.31.11 dasdsafafa fafsafaasfa fafasfaa173.36.31.11使用awk
下面是从行尾删除第二个IP的一种方法。
$ awk '{sub($1"$", "")} 1' test.sh
173.36.31.10 dasdsafafa fafsafaasfa fafasfaa
173.36.31.11 dasdsafafa fafsafaasfa fafasfaa在awk中,$1指定行中的第一个字段。因此,如果第一个字段在行尾重复,sub($1"$", "")将删除它。
更详细地说,对于正则表达式,$表示行尾。因此,$1"$"将匹配行尾再次出现的第一个字段。命令sub($1"$", "")使用空字符串替换这种重复出现的情况。
使用shell
$ while read ip rest; do echo "$ip ${rest%$ip}"; done <test.sh
173.36.31.10 dasdsafafa fafsafaasfa fafasfaa
173.36.31.11 dasdsafafa fafsafaasfa fafasfaa使用sed
这将查找行中第一个单词在行尾重复的任何行。如果是,则删除重复:
$ sed -r 's/([^ ]*)( .*)\1$/\1\2/' test.sh
173.36.31.10 dasdsafafa fafsafaasfa fafasfaa
173.36.31.11 dasdsafafa fafsafaasfa fafasfaa使用python
with open('test.sh') as fhandle:
for line in fhandle:
line = line.rstrip()
ip=line.split()[0]
if line.endswith(ip):
line=line[:-len(ip)]
print(line)这会产生相同的输出。
发布于 2015-05-13 14:50:48
使用Perl的
cat test.sh | perl -ne 's/^(\d+\.\d+\.\d+\.\d+)(.*)\1$/$1$2/; print'https://stackoverflow.com/questions/30203276
复制相似问题