免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4029 | 回复: 10
打印 上一主题 下一主题

[文本处理] ~急~ while 循环处理.*异常 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-19 18:57 |只看该作者 |倒序浏览
test文件里的内容为

在/etc/syslog-ng/syslog-ng.conf(suse11)或/etc/syslog.conf(suse9) 文件中增加 *.* @remote-host:514这样的配置;其中remote-host为远程日志服务器的IP#
写一个测试while。。do的测试脚本取test的内容,脚本内容如下

#/bin/bash
  cat test |while read line
do
      echo $line
done

脚本执行完后输出的内容为

在/etc/syslog-ng/syslog-ng.conf(suse11)或/etc/syslog.conf(suse9) 文件中增加 check.sh common.sh ssoc_dispense_unzip.sh ssoc_unzip.sh ssoc_whitelist_unzip.sh zxsoc_proc_analysis.sh zxsoc_proc_check.sh zxsoc_proc_check_install.sh zxsoc_proc_check_uninstall.sh zxsoc_sec_analysis.sh zxsoc_sec_check.sh zxsoc_sec_check_install.sh zxsoc_sec_check_uninstall.sh @remote-host:514这样的配置;其中remote-host为远程日志服务器的IP#

test文件中的*.*被替换成其他内容了,除了在*.*前面加转义还有什么方法能让这几个字符原样输出吗?

论坛徽章:
0
2 [报告]
发表于 2014-06-19 19:11 |只看该作者
echo "$CU"

论坛徽章:
0
3 [报告]
发表于 2014-06-20 16:03 |只看该作者
楼上的老大能说的详细点吗?没明白什么意思呢,谢谢!

论坛徽章:
0
4 [报告]
发表于 2014-06-20 16:23 |只看该作者
刚用楼上的方法测试没成功哦。

论坛徽章:
0
5 [报告]
发表于 2014-06-20 16:56 |只看该作者
  1. 1586 16:53:47 root@localhost:/dev/shm/CU/4142729 # ls
  2. 1587 16:53:47 root@localhost:/dev/shm/CU/4142729 # cat >test<<'CU'
  3. > 在/etc/syslog-ng/syslog-ng.conf(suse11)或/etc/syslog.conf(suse9) 文件中增加 *.* @remote-host:514这样的配置;其中remote-host为远程日志服务器的IP#
  4. > CU
  5. 1588 16:54:07 root@localhost:/dev/shm/CU/4142729 # cat test
  6. 在/etc/syslog-ng/syslog-ng.conf(suse11)或/etc/syslog.conf(suse9) 文件中增加 *.* @remote-host:514这样的配置;其中remote-host为远程日志服务器的IP#
  7. 1589 16:54:12 root@localhost:/dev/shm/CU/4142729 # cat >s<<'CU'
  8. > #/bin/bash
  9. >   cat test |while read line
  10. > do
  11. >       echo "$line"
  12. > done
  13. > CU
  14. 1590 16:54:57 root@localhost:/dev/shm/CU/4142729 # cat s
  15. #/bin/bash
  16.   cat test |while read line
  17. do
  18.       echo "$line"
  19. done
  20. 1591 16:54:58 root@localhost:/dev/shm/CU/4142729 # chmod u+x s
  21. 1592 16:55:05 root@localhost:/dev/shm/CU/4142729 # ./s
  22. 在/etc/syslog-ng/syslog-ng.conf(suse11)或/etc/syslog.conf(suse9) 文件中增加 *.* @remote-host:514这样的配置;其中remote-host为远程日志服务器的IP#
  23. 1593 16:55:07 root@localhost:/dev/shm/CU/4142729 #
复制代码

论坛徽章:
0
6 [报告]
发表于 2014-06-23 19:51 |只看该作者
楼上的老大能帮解释下CU的含义吗?我网上没搜到

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
7 [报告]
发表于 2014-06-23 19:57 |只看该作者
回复 6# 春天里的夏


    [@]用户名注册后不能更改[/@] 大神又调皮了....

这里的CU 平时比较多见的是 EOF, 也就是个开始标记.
<<CU  
XXOO
OOXX
XXOO
CU

论坛徽章:
0
8 [报告]
发表于 2014-06-24 02:35 |只看该作者
回复 6# 春天里的夏

唔,这里应该算是<<here documents的用法,here documents可以将多行文本一并提交给前面的命令来处理。
貌似解释得不好,楼主可以在网上稍微搜一下……

如楼上所说,网上多见
command<<EOF
aaa
bbb
ccc
EOF
但实际上,这里的EOF仅作为bash界定边界用,其实可以为任意接下来不会出现的字符串。譬如以下是错误的
command<<bbb
aaa
bbb
ccc
bbb
它使bash不能正确识别here documents的起止。
因为我对ChinaUnix爱得深沉,所以常使用CU作为界定边界字符串。

此外,当界定边界字符串被单引号'包围时,here documents中的文本将不会被bash解析。譬如

  1. 1712 02:27:12 root@localhost:/dev/shm/CU/4142729 # ls
  2. s  test
  3. 1713 02:27:13 root@localhost:/dev/shm/CU/4142729 # cat >n<<CU
  4. > my name is $USER.
  5. > CU
  6. 1714 02:27:43 root@localhost:/dev/shm/CU/4142729 # cat >>n<<'CU'
  7. > my id is $UID.
  8. > CU
  9. 1715 02:28:05 root@localhost:/dev/shm/CU/4142729 # cat n
  10. my name is root.
  11. my id is $UID.
  12. 1716 02:28:07 root@localhost:/dev/shm/CU/4142729 #
复制代码
可以看到,没有使用单引号时,$USER被解析为了root,而使用了单引号后,$UID原样输出到了文件n中。

论坛徽章:
0
9 [报告]
发表于 2014-06-24 11:31 |只看该作者
明白了楼上老大说的意思了。

但是用上面cu的方法要手动输入文件的内容,现在我的问题是文件的内容是固定的,要读文件的内容然后取字段,test文件里的内容是已经生成好了的格式如下:
Jun 24 08:55:54 #SUSE_SEC_02_01_04#1.在/etc/syslog-ng/syslog-ng.conf(suse11)或/etc/syslog.conf(suse9) 文件中增加 *.* @remote-host:514这样的配置;其中remote-host为远程日志服务器的IP;,2.日志集中存放功能需要配备有远程日志服务器支持;
Jun 24 08:55:54 #SUSE_SEC_05_01_04#1.建议关闭telnet服务,chkconfig telnet off; ,2.chkconfig --list |grep telnet进行检查

用循环取test里的各个内容会把第一条的.*解析,除了上面的方法,还有其他的方法吗?谢谢各位!

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
10 [报告]
发表于 2014-06-24 12:59 |只看该作者

打开ABS,看里面的多少页。

要规避变量,用双引号或者\来转义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP