for循环如何处理文本
发表于 : 2010-09-08 23:38
root@linux:[/etc/shell]cat list.txt
sep 8 23:26:58 mx2 sshd(pam_unix)[23164]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
Sep 8 23:27:00 mx2 sshd(pam_unix)[23169]: check pass; user unknown
Sep 8 23:27:00 mx2 sshd(pam_unix)[23169]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
Sep 8 23:27:03 mx2 sshd(pam_unix)[23172]: check pass; user unknown
Sep 8 23:27:03 mx2 sshd(pam_unix)[23172]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
Sep 8 23:27:05 mx2 sshd(pam_unix)[23175]: check pass; user unknown
Sep 8 23:27:05 mx2 sshd(pam_unix)[23175]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
大概这种内容的文本数据很长,用for循环然后做文字筛选,但是for循环后面的参数要加引号才能区分空格
#!/bin/bash
a=`cat list.txt `
for r in $a
do
# echo "`echo $r |grep 203.86.48.53 |sed 's/host/ip/'`"
echo $r
done
类似这种脚本 想对$r做文字处理,但是这样写的话把list.txt文本里的空格区作为一个参数,应该怎么做才能按照文本原样的行来处理??
sep
8
23:26:58
mx2
sshd(pam_unix)[23164]:
authentication
failure;
logname=
uid=0
euid=0
tty=ssh
ruser=
rhost=203.86.48.53
Sep
8
23:27:00
mx2
sshd(pam_unix)[23169]:
check
pass;
user
unknown
Sep
8
运行脚本的结果是这样的。都用空格区分了,文本太长又不能贴在变量里用“”,老大指示了必须用for写怎么做呢??大家帮帮忙
sep 8 23:26:58 mx2 sshd(pam_unix)[23164]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
Sep 8 23:27:00 mx2 sshd(pam_unix)[23169]: check pass; user unknown
Sep 8 23:27:00 mx2 sshd(pam_unix)[23169]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
Sep 8 23:27:03 mx2 sshd(pam_unix)[23172]: check pass; user unknown
Sep 8 23:27:03 mx2 sshd(pam_unix)[23172]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
Sep 8 23:27:05 mx2 sshd(pam_unix)[23175]: check pass; user unknown
Sep 8 23:27:05 mx2 sshd(pam_unix)[23175]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=203.86.48.53
大概这种内容的文本数据很长,用for循环然后做文字筛选,但是for循环后面的参数要加引号才能区分空格
#!/bin/bash
a=`cat list.txt `
for r in $a
do
# echo "`echo $r |grep 203.86.48.53 |sed 's/host/ip/'`"
echo $r
done
类似这种脚本 想对$r做文字处理,但是这样写的话把list.txt文本里的空格区作为一个参数,应该怎么做才能按照文本原样的行来处理??
sep
8
23:26:58
mx2
sshd(pam_unix)[23164]:
authentication
failure;
logname=
uid=0
euid=0
tty=ssh
ruser=
rhost=203.86.48.53
Sep
8
23:27:00
mx2
sshd(pam_unix)[23169]:
check
pass;
user
unknown
Sep
8
运行脚本的结果是这样的。都用空格区分了,文本太长又不能贴在变量里用“”,老大指示了必须用for写怎么做呢??大家帮帮忙