加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:36:46 所属栏目:百科 来源:网络整理
导读:在linux shell脚本中使用正则表达式解析字符串的正确方法是什么?我写了以下脚本来使用curl和sed在控制台上打印我的SO代码(不仅仅是因为我很奇怪 – 我正在尝试在切换到linux之前学习一些shell脚本和正则表达式)。 json=$(curl -s http://stackoverflow.com/
在linux shell脚本中使用正则表达式解析字符串的正确方法是什么?我写了以下脚本来使用curl和sed在控制台上打印我的SO代码(不仅仅是因为我很奇怪 – 我正在尝试在切换到linux之前学习一些shell脚本和正则表达式)。
json=$(curl -s http://stackoverflow.com/users/flair/165297.json)
echo $json | sed 's/.*"reputation":"([0-9,]{1,})".*/1/' | sed s/,//

但不知何故,我觉得sed不是在这里使用的正确工具。我听说grep是关于正则表达式的,并且对它进行了探索。但是,显然,每当发现一个匹配时,它会打印整行 – 我试图从一行文本中提取一个数字。这是一个我正在工作的字符串的缩小版本(由curl返回)。

{“displayName”:”Amarghosh”,”reputation”:”2,737″,”badgeHtml”:”u003cspan title=”1 silver badge”u003eu003cspan class=”badge2”u003e●u003c/spanu003eu003cspan class=”badgecount”u003e1u003c/spanu003eu003c/spanu003e”}

我想我的问题是:

>在linux shell脚本中使用正则表达式解析字符串的正确方法是什么?
sed在这里使用正确的东西吗?
>这可以使用grep吗?
>还有其他命令更容易/适当吗?

grep命令将从许多选择所需的行,但不会直接操作该行。为此,您在管道中使用sed:
someCommand | grep 'Amarghosh' | sed -e 's/foo/bar/g'

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

someCommand | awk '/Amarghosh/ { do something }'

对于简单的文本操作,只需坚持使用grep / sed组合。当您需要更复杂的处理时,请继续执行awk或perl。

我的第一个想法是使用:

echo '{"displayName":"Amarghosh","reputation":"2,737","badgeHtml"'
    | sed -e 's/.*tion":"//' -e 's/".*//' -e 's/,//g'

它将sed进程的数量保持为一个(可以使用-e给出多个命令)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读