代码之家  ›  专栏  ›  技术社区  ›  Michael Gruenstaeudl

在字符串中移动子字符串

  •  1
  • Michael Gruenstaeudl  · 技术社区  · 7 年前

    目标是将方括号(加上括号)中的所有字段移动到其前一个冒号字符。

    $echo "foo: bar [baz] qux: quux [quix]" | sought_command
    foo[baz]: bar qux[quix]: quux
    

    awk 强大到足以实现这一点,但也许 塞德

    :

    这是第一次尝试使用 :

    echo "foo: bar [baz] qux: quux [quix]" | sed 's/\[*]\/\:\1\2/g'
    

    这是第一次尝试使用 :

    echo "foo: bar [baz] qux: quux [quix]" | awk -v 'RS=\]' '{print substr($1,1,length($1)-1) $3 "]: " $2}'
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   kvantour    7 年前

    sed:

    sed 's|\([^ :]*\):\([^:[]*\)\(\[[^]]*\]\)|\1\3:\2|g'
    

    1. \([^ :]*\):
    2. \([^:[]*\) 任何不包含冒号和开括号的内容。备注:您必须在左方括号前写冒号,如下所示 [:] 在sed中具有未定义的含义。
    3. \(\[[^]]*\]\) 方括号内的任何内容。
        2
  •  0
  •   potong    7 年前

    sed -r 's/:([^[]*)([^]]*\]) ?/\2:\1/g' file
    

    符号后面的模式匹配 : 并重新排列后面的引用。

    -r

    sed 's/:\([^[]*\)\([^]]*\]\) \?/\2:\1/g' file