如何通过脚本获取文本文件中的部分内容?
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
如何通过脚本获取文本文件中的部分内容?
想通过shell脚本分析配置一个文本文件,文件可能包含类似[key_word]这样的内容。
其中key_word是不固定的,但都是通过中括号括起来。
现在可以用sed查找到包含key_word的文本行,脚本如下,sed 's/\(\[\)\(.*\)\(\]\)/\2/'
但是不知道能否利用sed为shell变量赋值呢?谢谢!
其中key_word是不固定的,但都是通过中括号括起来。
现在可以用sed查找到包含key_word的文本行,脚本如下,sed 's/\(\[\)\(.*\)\(\]\)/\2/'
但是不知道能否利用sed为shell变量赋值呢?谢谢!
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- yaoms
- 帖子: 4952
- 注册时间: 2007-10-19 14:51
- 来自: 深圳
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何通过脚本获取文本文件中的部分内容?
我没描述清楚,其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量。应该怎样作呢?eexpress 写了:grep key_word *
-
- 帖子: 1028
- 注册时间: 2008-11-01 21:42
- 来自: 树下板凳
Re: 如何通过脚本获取文本文件中的部分内容?
lz还是帖一段你的文本吧,再举个例子,你的要求有点不好理解
cat a.txt |grep -o "\[[^]]*\]" | sed -e "s/\[//" -e "s/\]//"
括号括起来的内容有多个,找出来过后,如何赋给一个变量?其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量
cat a.txt |grep -o "\[[^]]*\]" | sed -e "s/\[//" -e "s/\]//"
上次由 t3swing 在 2009-09-14 17:28,总共编辑 1 次。
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
- yaoms
- 帖子: 4952
- 注册时间: 2007-10-19 14:51
- 来自: 深圳
Re: 如何通过脚本获取文本文件中的部分内容?
啥啊,看人家的要求:eexpress 写了:yaoms, 你-o了,那就看傻单词了。
这样保存进变量。poplarc 写了:我没描述清楚,其实是想搜索所有用中括号括起来的内容,然后将这样的内容赋值给一个变量。应该怎样作呢?eexpress 写了:grep key_word *
代码: 全选
matchword=`grep -o keyword filename`
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
alias 爱慕颇雷尔='mplayer'
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何通过脚本获取文本文件中的部分内容?
好建议。比如说文本文件可能是这样的。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
代码: 全选
#! /bin/bash
var=`grep -o "\[[^]]*\]" nmc.conf`
echo "$var"
- HuntXu
- 帖子: 5776
- 注册时间: 2007-09-29 3:09
Re: 如何通过脚本获取文本文件中的部分内容?
代码: 全选
var=`grep -o "\[[^]]*\]" nmc.conf|sed -r 's/\[([^]]+)/\1/'`
HUNT Unfortunately No Talent...
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 如何通过脚本获取文本文件中的部分内容?
是不是这样
代码: 全选
for keyword in `sed -n 's/.*\[\(.*\)\].*/\1/p' nmc.conf; do
do_something
done
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何通过脚本获取文本文件中的部分内容?
根据HuntXu的提示,稍微改了改,像下面这个样子,发现可以了:HuntXu 写了:这样么?代码: 全选
var=`grep -o "\[[^]]*\]" nmc.conf|sed -r 's/\[([^]]+)/\1/'`
代码: 全选
var=`grep -o "\[[^]]*\]" nmc.conf | sed -r 's/(\[)(.*)(\])/\2/'`
代码: 全选
var=`grep -o "\[.*\]" nmc.conf | sed -r 's/(\[)(.*)(\])/\2/'`
-
- 帖子: 1028
- 注册时间: 2008-11-01 21:42
- 来自: 树下板凳
Re: 如何通过脚本获取文本文件中的部分内容?
用这个样子吧 "\[[^]]*\]",\[.*\]这个样子有时有问题,最长匹配原则,如果一行有两个 [ aaa ] [bbb ] 他会匹配 [ aaa bbb]
“\[[^]]*\]” \转义,[^]] 里面不包含 ] 的字符 ,[^]]* 0或多个不包含]的字符 ,shell正则表达式
“\[[^]]*\]” \转义,[^]] 里面不包含 ] 的字符 ,[^]]* 0或多个不包含]的字符 ,shell正则表达式
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
- poplarc
- 帖子: 43
- 注册时间: 2007-01-20 22:20
- 来自: 深圳
Re: 如何通过脚本获取文本文件中的部分内容?
啊,明白了。原来方括号里面的^意思是除了指定字符之外的字符。多谢。t3swing 写了:用这个样子吧 "\[[^]]*\]",\[.*\]这个样子有时有问题,最长匹配原则,如果一行有两个 [ aaa ] [bbb ] 他会匹配 [ aaa bbb]
“\[[^]]*\]” \转义,[^]] 里面不包含 ] 的字符 ,[^]]* 0或多个不包含]的字符 ,shell正则表达式
谢谢大家相助!