gpt4 book ai didi

Sed - 在不止一次匹配的行中打印模式

转载 作者:行者123 更新时间:2023-12-02 22:27:47 25 4
gpt4 key购买 nike

输入-

X's Score 1725 and Y's Score 6248 in the match number 576

我要 sed 输出-

1725

6248

我的代码-

sed 's/Score[[:space:]]\([0-9]+\)/\1/g'

以上代码输出-

1725 and Y's 6248 in the match

最佳答案

您可以尝试以下 sed 命令

#!/bin/sed f
s/Score\s*/\
/g
s/\n\([0-9]\+\)[^\n]*/\
\1/g
s/^[^\n]*\n//

第一个命令用换行符替换所有“Score”,所以现在所有数字都在一行的开头。要插入换行符,我们必须写一个反斜杠,然后是一个实际的换行符。这就是命令产生两行的原因。

第二个命令将删除行首数字之后的所有内容。它将匹配一个换行符后跟一个数字(这就是我们现在这个数字以“Score”字符串为前缀的方式)。该数字将被捕获到变量 \1 中。然后它将跳过所有字符直到换行符。在写替换时,我们必须将换行符和捕获的数字恢复到\1中。

因为第一行包含第一个“Score”之前的文本,我们必须将其删除。这就是最后一个命令所做的,它匹配所有字符直到第一个换行符,从模式空间内容的开头开始(即我们的工作缓冲区)。

在一个命令中:

sed -e 's/Score\s*/\
/g;s/\n\([0-9]\+\)[^\n]*/\
\1/g;s/^[^\n]*\n//'

希望这有帮助 =)

关于Sed - 在不止一次匹配的行中打印模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com