shell 如何提取文件中的指定内容

2019-04-02 11:52:25 +08:00
 css3

我有这一样一个文件,有个需求,提取指定内容,如,想提取 red 这一组的 ip 出来,应该怎么用 shell 实现啊 :

// hosts.txt
[green]
192.168.1.1

[bule]
192.168.1.123
192.168.1.156

[red]
192.168.1.14
192.168.1.231
192.168.14.27

[yellow]
192.168.2.55
192.168.13.23

.....
// 多组这样的内容

5681 次点击
所在节点    程序员
25 条回复
CallMeReznov
2019-04-02 11:58:28 +08:00
j0hnj
2019-04-02 12:00:16 +08:00
python3 -c "import configparser; config = configparser.ConfigParser(); config.read('hosts.txt'); print(config['red'])"
jasonyang9
2019-04-02 12:02:06 +08:00
搜索关键字:linux ini style config parser
css3
2019-04-02 12:26:31 +08:00
@j0hnj 执行后是这样啊,不是 ip
<Section: red>😭
pudgedoor
2019-04-02 12:28:11 +08:00
Awk 了解一下
OscarUsingChen
2019-04-02 12:33:00 +08:00
shell? 那意思不能用 awk,不能用 grep,不能用 python?
css3
2019-04-02 12:39:20 +08:00
@OscarUsingChen 可以啊
taolu
2019-04-02 12:50:20 +08:00
sed -n '/red/,/yellow/p' | sed -e 's/\[red\]//' -e 's/\[yellow\]//' -e '/^$/d'
d0m2o08
2019-04-02 12:52:51 +08:00
[root@rac1 tmp]# cat 123
[green]
192.168.1.1

[bule]
192.168.1.123
192.168.1.156

[red]
192.168.1.14
192.168.1.231
192.168.14.27

[yellow]
192.168.2.55
192.168.13.23
[root@rac1 tmp]# sed -n '/\[red\]/,/^$/p' 123
[red]
192.168.1.14
192.168.1.231
192.168.14.27

[root@rac1 tmp]#
taolu
2019-04-02 12:54:34 +08:00
sed -n '/red/,/^$/p' | sed -e 's/\[red\]//' -e '/^$/d'
修改了下
OscarUsingChen
2019-04-02 12:54:53 +08:00
OscarUsingChen
2019-04-02 12:55:41 +08:00
^纯 bash,基本没有依赖。
taolu
2019-04-02 12:56:05 +08:00
@d0m2o08 #9 正好想到,没想到已经发了,哈哈😄
d0m2o08
2019-04-02 12:58:09 +08:00
@taolu 666
DiamondbacK
2019-04-02 13:09:54 +08:00
不知道哪个是你想要的:

sed -n '/^\[red\]$/,/^ *$/p' # 假定每组有空行分隔
sed -n '/^\[red\]$/,/^ *$/{/^[^[]/p}'
sed -n '/^\[red\]$/{:a;/^ *$/!{n;p;ba;}}'
aver4vex
2019-04-02 13:21:26 +08:00
按行读数据。碰到 [red] 之后就提取下方数据,直到碰到[开头的为止。没啥难度。
sunnyadamm
2019-04-02 13:54:10 +08:00
sed,awk 都可以,具体用法自己查
sunnyadamm
2019-04-02 13:55:33 +08:00
再看一下,如果 IP 都是 192.168 开头,你 grep 也可以啊。。。
lululau
2019-04-02 14:08:38 +08:00
既然 sed / (g)awk 都算 shell,那么这个算吗

ruby -ne 'print if /^\[red\]$/../^$/'
liwl
2019-04-02 17:20:00 +08:00
@lululau sed 和 awk 不用装很多社区版都有,ruby 有环境?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/551185

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX