~$ string="221.11.165.237xxxx221.11.165.233\n
219.158.9.97ttttt219.158.19.137"
~$ echo $string > /tmp/test.txt
现在检查二进制的真实字符串。
~$ xxd /tmp/test.txt
00000000: 3232 312e 3131 2e31 3635 2e32 3337 7878 221.11.165.237xx
00000010: 7878 3232 312e 3131 2e31 3635 2e32 3333 xx221.11.165.233
00000020: 5c6e 2032 3139 2e31 3538 2e39 2e39 3774 \n 219.158.9.97t
00000030: 7474 7474 3231 392e 3135 382e 3139 2e31 tttt219.158.19.1
00000040: 3337 0a 37
我们在字符串末尾只能看到一个0a
用ip地址分割字符串
~$ echo "$string" | awk -v RS='([0-9]+\\.){3}[0-9]+' '{print $0}' > /tmp/test1.txt
~$ xxd /tmp/test1.txt
00000000: 0a78 7878 780a 5c6e 0a0a 7474 7474 740a .xxxx.\n..ttttt.
00000010: 0a0a
为什么文件末尾有三个换行符0a
?
在我的观察中,最后可能有两个换行符0a
,一个是前一个,另一个是由awk中的print函数创建的,这导致第三个0a
?
为什么结果不是以下:
~$ xxd /tmp/test1.txt
00000000: 0a78 7878 780a 5c6e 0a0a 7474 7474 740a .xxxx.\n..ttttt.
00000010: 0a
..
观看屏幕截图更为清晰。
答案 0 :(得分:1)
1)
- 删除\n
2)
echo
- 默认添加新行 - 使用echo -n
3)
awk print
- 使用printf %s
set string="221.11.165.237xxxx221.11.165.233" ;
echo -n "$string" | awk -v RS='([0-9]+\\.){3}[0-9]+' '{printf "%s", $0}'