首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在shell脚本中使用正则表达式

在shell脚本中使用正则表达式
EN

Stack Overflow用户
提问于 2009-10-28 10:21:59
回答 11查看 68.2K关注 0票数 23

使用linux脚本中的正则表达式解析字符串的正确方法是什么?我编写了下面的脚本,使用curlsed在控制台上打印我的some (不仅仅是因为我的代表疯了--在切换到linux之前,我正在尝试学习一些shell脚本和regex )。

代码语言:javascript
运行
复制
json=$(curl -s http://stackoverflow.com/users/flair/165297.json)
echo $json | sed 's/.*"reputation":"\([0-9,]\{1,\}\)".*/\1/' | sed s/,//

但不知何故,我觉得sed不是这里使用的合适工具。我听说grep完全是关于regex的,并对其进行了一些探索。但很明显,每当找到匹配时,它就会打印整条线--我正试图从一行文本中提取一个数字。下面是我正在处理的字符串的缩小版本(由curl返回)。

{"displayName":"Amarghosh",“名誉”:“2,737”,"badgeHtml":"\u003cspan title=\"1枚银徽章\\u003E\u003cspan displayName

我想我的问题是:

  • 使用linux脚本中的正则表达式解析字符串的正确方法是什么?
  • 在这里使用sed是正确的吗?
  • 这能用grep来完成吗?
  • 还有其他更容易/更合适的命令吗?
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-10-28 10:28:58

grep命令将从许多行中选择所需的行,但它不会直接操作行。为此,在管道中使用sed

代码语言:javascript
运行
复制
someCommand | grep 'Amarghosh' | sed -e 's/foo/bar/g'

或者,可以使用awk (如果可用的话也可以使用perl )。在我看来,这是一个比sed强大得多的文本处理工具。

代码语言:javascript
运行
复制
someCommand | awk '/Amarghosh/ { do something }'

对于简单的文本操作,只需使用grep/sed组合即可。当您需要更复杂的处理时,请继续使用awkperl

我的第一个想法就是用:

代码语言:javascript
运行
复制
echo '{"displayName":"Amarghosh","reputation":"2,737","badgeHtml"'
    | sed -e 's/.*tion":"//' -e 's/".*//' -e 's/,//g'

这使得sed进程的数量保持在一个(您可以使用-e提供多个命令)。

票数 11
EN

Stack Overflow用户

发布于 2009-10-28 10:52:16

您可能对将Perl用于此类任务感兴趣。作为一个演示,下面是一个Perl脚本,它打印您想要的数字:

代码语言:javascript
运行
复制
#!/usr/local/bin/perl
use warnings;
use strict;
use LWP::Simple;
use JSON;

my $url = "http://stackoverflow.com/users/flair/165297.json";
my $flair = get ($url);
my $parsed = from_json ($flair);
print "$parsed->{reputation}\n";

此脚本要求您安装JSON模块,只需使用命令cpan JSON即可。

票数 8
EN

Stack Overflow用户

发布于 2009-10-28 10:56:41

为了在shell脚本中使用JSON,可以使用爪哇,它喜欢awk,但是对于JSON。

代码语言:javascript
运行
复制
json=$(curl -s http://stackoverflow.com/users/flair/165297.json)
echo $json | jsawk 'return this.reputation' # 2,747
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1636352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档