gpt4 book ai didi

linux sed 如何从提取的输出中删除括号

转载 作者:太空狗 更新时间:2023-10-29 11:35:48 25 4
gpt4 key购买 nike

我想从字符串中提取10000

echo "some ran string (unique unique 10000) abc 161 xyz 100"

而且我不知道如何删除结尾 )。下面是我到目前为止尝试过的 sed 命令:

sed -n -r 's/.*unique(.*) abc .*/\1/p'

输出是:

 echo "some ran string (unique unique 10000) abc 161 xyz 100" | sed -n -r 's/.*unique(.*) abc .*/\1/p'
10000)

关于如何从此输出中删除结尾 ) 和前导空格的任何建议?谢谢。

最佳答案

您可以使用以下 sed 命令,它匹配右括号之前的非空格字符:

sed 's/.*\s\([^\s]*\)).*/\1/'

它匹配:

.*        any character zero or more times
\s a space
\( begin of capturing group 1
[^\s]* non space characters zero or more times (the number)
\) end of capturing group 1
) ) after the number
.* any character zero or more time (the remain of the line)

因为模式开头和结尾的 .* 将匹配整行。它替换为:

\1        The content of capturing group 1 (the number)

如评论中所述,由于 \s 转义序列(用于空白),上述版本与 POSIX 不兼容。对于与 POSIX 兼容的版本,您可以只使用文字空间:

sed 's/.* \([^ ]*\)).*/\1/'

或使用[:space:] 字符类:

sed 's/.*[[:space:]]\([^[:space:]]*\)).*/\1/'

顺便说一句,如果你有 GNU grep,你可以使用 Perl 正则表达式。 Perl 正则表达式支持 look-ahead assertions .像这样:

grep -oP '\d+(?=\))'

解释:

-o        output the match only, not the whole line that contains the match
-P Perl compatible regexes. GNU grep only!

\d+ one ore more digits
(?=\)) look-ahead assertion. Means 'previous pattern is followed by a )'

关于linux sed 如何从提取的输出中删除括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879978/

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