在Shell脚本中使用正则表达式
在Linux
Shell脚本中使用正则表达式解析字符串的正确方法是什么?我编写了以下脚本,使用curl
和在控制台上打印我的SO代表sed
(不仅仅因为我代表rep
-crazy-我试图在切换到Linux之前学习一些Shell脚本和regex)。
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”,“声誉”:“ 2,737”,“ badgeHtml”:“ \ u003cspan title
= \” 1个银色徽章\“ \ 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
进程数保持为1(您可以使用发出多个命令-e
)。
以上是 在Shell脚本中使用正则表达式 的全部内容, 来源链接: utcz.com/qa/416315.html