bash中的Regexp表示介于;引述;
输入: 我需要一个正则表达式,将在bash中工作,可以让我之间的引号的数字。正则表达式应该匹配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的主要功能是过滤与给定正则表达式匹配的行
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