gpt4 book ai didi

regex - sed 在一行中多次替换

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

这可能是一个非常基本的问题,但我无法为此形成 sed on liner。

考虑这条线

foo@some_text/48183 bar@another-test/22787 xyz@some_another_text/2291

我想替换从“@”到以逗号分隔的空格的所有内容。
所以我的预期输出应该看起来像
foo,bar,xyz

我在尝试 sed -e 's/@.*[^ ]/,/g'替换直到空格,但是它正在替换整行(在编写常规 exp 时不太好)。

任何帮助将不胜感激。

最佳答案

您可以找到并捕获除 @ 之外的任何 1+ 个字符在 @ 之前char,然后匹配 @并且除空格之外的任何 0+ 字符后跟 0+ 空格字符,并将所有这些替换为 Group 1 的占位符和逗号。然后,您将必须删除尾随逗号。

sed demo :

s='foo@some_text/48183 bar@another-test/22787 xyz@some_another_text/2291'
echo "$s" | sed -E 's/([^@]+)@[^[:space:]]*[[:space:]]*/\1,/g' | sed 's/,$//'

请注意,您也可以使用 sed 's/\([^@][^@]*\)@[^[:space:]]*[[:space:]]*/\1,/g'在 POSIX ERE 版本中。在 BRE POSIX 中,您应该转义 ()形成一个捕获组,和 +量词应该转义,或替换为 aa* build 。

详情
  • ([^@]+) - 捕获组 1:1+ 字符,而不是 @
  • @ - 一个 @字符
  • [^[:space:]]* - 0+ 字符而不是空格
  • [[:space:]]* - 0+ 个空格字符
  • \1是使用捕获组 #1 捕获的文本的占位符。

    第二个 sed 's/,$//'用于删除尾随 ,在字符串的末尾。

    关于regex - sed 在一行中多次替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675302/

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