gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:15:14 28 4
gpt4 key购买 nike

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

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 组合。当您需要更复杂的处理时,请继续使用 awkperl

我的第一个想法是只使用:

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

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

关于regex - 在 shell 脚本中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1636352/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com