当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 15:36 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
想通过shell脚本分析配置一个文本文件,文件可能包含类似[key_word]这样的内容。
其中key_word是不固定的,但都是通过中括号括起来。
现在可以用sed查找到包含key_word的文本行,脚本如下,sed 's/\(\[\)\(.*\)\(\]\)/\2/'
但是不知道能否利用sed为shell变量赋值呢?谢谢! :em06


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 15:52 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
grep key_word *


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 16:10 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
grep -o keyword *


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 16:21 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
yaoms, 你-o了,那就看傻单词了。
:em04


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 16:45 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
grep key_word *


我没描述清楚,其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量。应该怎样作呢? :em03


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 17:22 

注册: 2008-11-01 21:42
帖子: 1028
地址: 树下板凳
送出感谢: 0 次
接收感谢: 1
lz还是帖一段你的文本吧,再举个例子,你的要求有点不好理解
引用:
其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量

括号括起来的内容有多个,找出来过后,如何赋给一个变量?
cat a.txt |grep -o "\[[^]]*\]" | sed -e "s/\[//" -e "s/\]//"


_________________
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。


最后由 t3swing 编辑于 2009-09-14 17:28,总共编辑了 1 次

页首
 用户资料  
 
7 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 17:27 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
eexpress 写道:
yaoms, 你-o了,那就看傻单词了。
:em04


啥啊,看人家的要求:

poplarc 写道:
eexpress 写道:
grep key_word *


我没描述清楚,其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量。应该怎样作呢? :em03


这样保存进变量。

代码:
matchword=`grep -o keyword filename`


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 17:28 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
t3swing 写道:
lz还是帖一段你的文本吧,再举个例子,你的要求有点不好理解
引用:
其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量

括号括起来的内容有多个,找出来过后,如何赋给一个变量?


好建议。比如说文本文件可能是这样的。
我希望我的脚本能够逐行分析这个文本文件,并从中找到中括号括起来部分进行特殊处理。不过不是同时将bedroom1~other rooms赋值给一个变量了,而是一个循环过程,每次循环将bedroom1或者other rooms赋值给一个变量并进行处理,直到处理完所有的room。
代码:
[bedroom 1]
192.168.0.11
192.168.0.12
[bedroom 2]
192.168.0.21
[living room]
192.168.0.31
[kitchen]
192.168.0.41
[other rooms...]
192.168.0.xx


在参考了t3swing和yaoms给出的建议之后,发现可以通过如下脚本从文本文件中过滤所有包含中括号的行,并且将过滤所得结果赋值给变量了。
代码:
#! /bin/bash
var=`grep -o "\[[^]]*\]" nmc.conf`
echo "$var"


但进一步的问题是,如何能将变量两边的中括号去掉呢?通过sed可以么?


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 18:52 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
代码:
var=`grep -o "\[[^]]*\]" nmc.conf|sed -r 's/\[([^]]+)/\1/'`

这样么?


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-14 19:34 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
是不是这样
代码:
for keyword in `sed -n 's/.*\[\(.*\)\].*/\1/p' nmc.conf; do
    do_something
done


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-15 9:05 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
HuntXu 写道:
代码:
var=`grep -o "\[[^]]*\]" nmc.conf|sed -r 's/\[([^]]+)/\1/'`

这样么?


根据HuntXu的提示,稍微改了改,像下面这个样子,发现可以了:
代码:
var=`grep -o "\[[^]]*\]" nmc.conf | sed -r 's/(\[)(.*)(\])/\2/'`

而且又试了一下,发现其实grep的匹配模式也可以改改,像下面这个样子也是可行的:
代码:
var=`grep -o "\[.*\]" nmc.conf | sed -r 's/(\[)(.*)(\])/\2/'`


不太明白“\[[^]]*\]”是什么意思。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-15 9:52 

注册: 2008-11-01 21:42
帖子: 1028
地址: 树下板凳
送出感谢: 0 次
接收感谢: 1
用这个样子吧 "\[[^]]*\]",\[.*\]这个样子有时有问题,最长匹配原则,如果一行有两个 [ aaa ] [bbb ] 他会匹配 [ aaa bbb]
“\[[^]]*\]” \转义,[^]] 里面不包含 ] 的字符 ,[^]]* 0或多个不包含]的字符 ,shell正则表达式


_________________
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 如何通过脚本获取文本文件中的部分内容?
帖子发表于 : 2009-09-15 10:07 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
t3swing 写道:
用这个样子吧 "\[[^]]*\]",\[.*\]这个样子有时有问题,最长匹配原则,如果一行有两个 [ aaa ] [bbb ] 他会匹配 [ aaa bbb]
“\[[^]]*\]” \转义,[^]] 里面不包含 ] 的字符 ,[^]]* 0或多个不包含]的字符 ,shell正则表达式


啊,明白了。原来方括号里面的^意思是除了指定字符之外的字符。多谢。

谢谢大家相助! :em05 :em11


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译