使用sed命令提取模式

使用sed命令提取模式,sed,Sed,我有一根这样的绳子 "112344 1234234 guest 25 % allocation used" 我想使用sed从这个字符串中提取25 在给定的行“112344 1234234使用了25%的客户分配”中,我只对“25%”感兴趣。第一个字段也可以为空,如下所示: “使用了25%的分配” 但“%allocation used”是固定字符串。 所以正则表达式应该基于这个固定模式 有人能帮我一下吗。基本上,你想要的是右边第四个字段。要得到这个,我将使用awk: awk '{ print $

我有一根这样的绳子

 "112344 1234234 guest 25 % allocation used"
我想使用sed从这个字符串中提取
25

在给定的行“112344 1234234使用了25%的客户分配”中,我只对“25%”感兴趣。第一个字段也可以为空,如下所示:

“使用了25%的分配”

但“%allocation used”是固定字符串。 所以正则表达式应该基于这个固定模式


有人能帮我一下吗。

基本上,你想要的是右边第四个字段。要得到这个,我将使用
awk

awk '{ print $(NF-3) }'
如果它绝对必须在
sed
中,请尝试以下操作:

sed -e 's/^/ /' -e 's/\(^|.* \)\(.*\) % allocation used/\1/'

基本上,您需要右起第四个字段。要得到这个,我将使用
awk

awk '{ print $(NF-3) }'
如果它绝对必须在
sed
中,请尝试以下操作:

sed -e 's/^/ /' -e 's/\(^|.* \)\(.*\) % allocation used/\1/'
试试这个

 cut -d% -f1 | awk '{ print $(NF) }'
试试这个

 cut -d% -f1 | awk '{ print $(NF) }'

如果您确定“%”前面的数字为2位,则可以使用以下数字

[jaypal~/Temp]$ cat text5
112344 1234234 guest 25 % allocation used
25 % allocation used
2344 guest 15 % allocation used

[jaypal~/Temp]$ sed 's/.*\(.. %\).*/\1/' text5
25 %
25 %
15 %

如果您确定“%”前面的数字为2位,则可以使用以下数字

[jaypal~/Temp]$ cat text5
112344 1234234 guest 25 % allocation used
25 % allocation used
2344 guest 15 % allocation used

[jaypal~/Temp]$ sed 's/.*\(.. %\).*/\1/' text5
25 %
25 %
15 %

很难找到只基于单个样本输入提取内容的正则表达式模式。哪些部分不同?以什么方式?(当然,这首先是编写正则表达式的本质。)这是非常不具体的。你总是想要第四个字段?前两位数字?请澄清您是要提取
25
还是
25%
。很难根据单个样本输入来提取正则表达式模式。哪些部分不同?以什么方式?(当然,这首先是编写正则表达式的本质。)这是非常不具体的。你总是想要第四个字段?前两位数字?请澄清是要提取
25
还是
25%
。它不是提取25%。而是打印整行。@Fayaz我用了
\@Fayaz你可能想更新你的问题。它声明
我想用sed从这个字符串中提取25个。
如果你也需要“%”-
sed-e的/*\@Jaypal谢谢,我错过了这个歧义。在给Fayaz一个澄清的机会后,我会修改我的答案。顺便说一句,你的不太正确-它只打印
%
@MichaelJ.Barber。如果前几个字段为空,并且字符串以
25%分配使用开始,我认为更新的解决方案不起作用
它没有提取25%。而是打印整行。@Fayaz我用了
\@Fayaz你可能想更新你的问题。它声明
我想用sed从这个字符串中提取25个。
如果你也需要“%”-
sed-e的/*\@Jaypal谢谢,我错过了这个歧义。在给Fayaz一个澄清的机会后,我会修改我的答案。顺便说一句,你的不太正确-它只打印
%
@MichaelJ.Barber。如果前几个字段是空的,并且字符串以
25%分配使用开始,我认为更新的解决方案不起作用