当前位置: 首页 > 面试题库 >

在Shell脚本中使用正则表达式

江宏伟
2023-03-14
问题内容

在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组合键即可。当您需要更复杂的处理时,请移至awkperl

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

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

这样可以将sed进程数保持为1(您可以使用发出多个命令-e)。



 类似资料:
  • 本文向大家介绍shell脚本之正则表达式、grep、sed、awk,包括了shell脚本之正则表达式、grep、sed、awk的使用技巧和注意事项,需要的朋友参考一下 --正则-- 基础正则 ^word     ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$     ##搜索以word结尾的 vi/vim中 $ 一行的结尾 ^$        ##表示空行 .        

  • 本文向大家介绍详解Linux--shell脚本之正则表达式,包括了详解Linux--shell脚本之正则表达式的使用技巧和注意事项,需要的朋友参考一下 一、正则表达式的概念及特点: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,

  • 1. Shell 正则表达式概述 1.1 正则表达式是什么 正则表达式 (regular expression)是一些具体有特殊含义的符号,组合在一起的共同描述字符或字符串的方法,通俗来讲正则为描述同一类事物的规则,例如我们生活中描述可以飞行的是事物,则满足这条规则的可以是鸟,蝴蝶,也可以是飞机等。 在 Linux 系统中,正则表达式通常用来对字符或字符串来进行处理,它是用于描述字符排列或匹配模式

  • 问题内容: 我有一个带有div的html页面,这些div的 ID 为 s1 , s2 等形式。 我想将CSS属性应用于这些部分/ div的子集(取决于id)。但是,每次添加 div时 ,都必须像这样分别为该部分添加css。 css中是否有类似正则表达式的内容,可用于将样式应用于一组 div 。 问题答案: 您可以设法选择那些元素而无需任何形式的正则表达式,如先前的答案所示,但是要直接回答问题,可以

  • 行动时刻 - 使用正则表达式 Unlang允许在条件检查中进行正则表达式计算。这些通常是Posix正则表达式。运算符=〜和!〜与正则表达式相关联。为了简单的概念证明,我们将修改上一个练习: 1.编辑FreeRADIUS配置目录下的sites-available / default虚拟服务器,并在该部分顶部的post-auth部分中添加以下内容: if(request:Framed-Protocol

  • sorter: "${$(...props)=>{timeSort(createTime)}$}$", ..$}$"."${$.. 希望结果 :sorter: (...props)=>{timeSort(createTime)}, ..$}$"."${$.. 规则: "${$ 和 $}$" 是一对,将他们替换为空。