Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中的Regexp表示介于;引述;_Bash_Scripting - Fatal编程技术网

bash中的Regexp表示介于;引述;

bash中的Regexp表示介于;引述;,bash,scripting,Bash,Scripting,输入: 我需要一个正则表达式,将在bash中工作,可以让我之间的引号的数字。正则表达式应该匹配22 谢谢 Hmm您是否在Bash>=3.2中尝试过\”([0-9]+)\”?Hmm您是否尝试过\”([0-9]+)\”? hello world "22" bye world 在Bash>=3.2中: hello world "22" bye world bash本身并没有真正的正则表达式。然而,有些程序可以使用正则表达式,其中包括grep和sed grep的主要功能是过滤与给定正则表达式匹配的行

输入:

我需要一个正则表达式,将在bash中工作,可以让我之间的引号的数字。正则表达式应该匹配
22

谢谢

Hmm您是否在Bash>=3.2中尝试过
\”([0-9]+)\”

Hmm您是否尝试过
\”([0-9]+)\”

hello world "22" bye world
在Bash>=3.2中:

hello world "22" bye world

bash本身并没有真正的正则表达式。然而,有些程序可以使用正则表达式,其中包括
grep
sed

grep的主要功能是过滤与给定正则表达式匹配的行,也就是说,将一些数据提供给stdin或文件,然后它打印与正则表达式匹配的行

sed不转换数据。它不仅返回匹配的行,还可以使用
s/regex/replacement/
命令告诉它返回什么。如果指定
-r
选项,则输出部分可以包含对组的引用(
\x
,其中x是组的编号)

所以我们需要的是
sed
。您的输入包含一些内容(
^..*
)、一个
、一些数字(
[0-9]+
)、一个
和一些内容(
*$
)。稍后我们需要引用这些数字,所以我们需要将这些数字作为一个组。因此,我们的完整匹配正则表达式是:
^.*“([0-9]+)”*$
。我们只想将其替换为数字,因此替换部分仅为
\1

构建完整的sed命令留给您作为练习
:-)


(请注意,sed不会转换不匹配的行。如果您的输入仅为上面提供的行,则可以。如果有其他行要自动跳过,则需要指定选项
-n
(无自动打印)并在sed表达式的末尾添加一个
n
,指示它打印该行。这样它只打印匹配的行。

bash本身并没有真正的正则表达式。然而,有些程序可以使用正则表达式,其中包括
grep
sed

grep的主要功能是过滤与给定正则表达式匹配的行,也就是说,将一些数据提供给stdin或文件,然后它打印与正则表达式匹配的行

sed不转换数据。它不仅返回匹配的行,还可以使用
s/regex/replacement/
命令告诉它返回什么。如果指定
-r
选项,则输出部分可以包含对组的引用(
\x
,其中x是组的编号)

所以我们需要的是
sed
。您的输入包含一些内容(
^..*
)、一个
、一些数字(
[0-9]+
)、一个
和一些内容(
*$
)。稍后我们需要引用这些数字,所以我们需要将这些数字作为一个组。因此,我们的完整匹配正则表达式是:
^.*“([0-9]+)”*$
。我们只想将其替换为数字,因此替换部分仅为
\1

构建完整的sed命令留给您作为练习
:-)


(请注意,sed不会转换不匹配的行。如果您的输入仅为上面提供的行,则可以。如果有其他行要自动跳过,则需要指定选项
-n
(无自动打印)然后在sed表达式的末尾添加一个
n
,指示它打印行。这样它只打印匹配的行。

纯Bash,没有Regex。数字在数组元素1中

while read -r line
do
    result=$(sed -n 's/.*\"\([0-9]\+\)\".*/\1/p')
    echo "$result"
done < inputfile.txt
IFS=\”#输入字段分隔符现在是双引号
读一行的时候;做一件事
echo-e“${line[1]}”
完成<“$infle”

纯Bash,数组元素1中没有Regex.Number

while read -r line
do
    result=$(sed -n 's/.*\"\([0-9]\+\)\".*/\1/p')
    echo "$result"
done < inputfile.txt
IFS=\”#输入字段分隔符现在是双引号
读的时候——一行;做
echo-e“${line[1]}”
完成<“$infle”

什么是“regexp脚本”?这听起来有点像家庭作业。不。。。我有200个节点,当我向web服务询问节点信息时,它会给我一个200行的提示:nodeid=“x”bla bla bla nodeid=“x”bla bla bla nodeid=“x”bla bla bla nodeid=“x”bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla nodeid=“x”我想获得引号之间的每个id并发送一个重置命令。“regexp脚本”是什么?这听起来有点像家庭作业。不。。。我有200个节点,当我向web服务询问节点信息时,它会给我一个200行的提示:nodeid=“x”bla bla bla nodeid=“x”bla bla nodeid=“x”bla bla bla nodeid=“x”bla bla bla nodeid=“x”bla bla bla bla我想获取引号之间的每个id,并发送一个重置命令。为什么要这样做呢?@Marian:只是演示如何将结果保存到一个变量以供进一步处理。如果您想让它进入屏幕,只需自己执行
sed…
。在我的第一个示例中,结果自动放置在变量中。我只是简单地将第二个并行化为第一个并行化的功能。为什么这是
result=
/
echo$result
的事情?@Marian:只是演示如何将结果保存到一个变量以供进一步处理。如果您想让它进入屏幕,只需自己执行
sed…
。在我的第一个示例中,结果自动放置在变量中。我只是简单地将第二个并行化为第一个并行化的功能。你能解释一下为什么它不适合你吗?这对我来说是可行的,但你必须捕获组1(假设你能做到)。您可以尝试其他变体,例如
^.*\“([0-9]+)\”.*$
。您能解释一下它对您不起作用的原因吗?这对我来说是可行的,但你必须捕获组1(假设你能做到)。您可以尝试其他变体,例如
^.*\“([0-9]+)\”*$
“bash本身并没有真正的正则表达式。”-请参阅我答案中的第一个示例。Bash本身确实有正则表达式。“构建完整的sed命令留给您作为练习”-或者您可以在我的答案中看到完整的
sed
命令的第二个示例。@Dennis