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

前端之家收集整理的这篇文章主要介绍了正则表达式 – 在shell脚本中使用正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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\”\u003e\u003cspan class=\”badge2\”\u003e●\u003c/span\u003e\u003cspan class=\”badgecount\”\u003e1\u003c/span\u003e\u003c/span\u003e”}

我想我的问题是:

>在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给出多个命令)。

猜你在找的正则表达式相关文章