使用 sed 替换子字符串

使用 sed 替换子字符串

所以我得到了一条看起来像这样的线

somelongbullshit:888:morelongbullshitthatcanhaveanything

我想:用制表符替换第二个。我可以用以下内容可靠地匹配我想要替换的子字符串:

^.*:[0-9]*(:)

我想替换那里的子字符串。所以我尝试了一些 sed

$ echo somelongbullshit:888:morelongbullshitthatcanhaveanything | sed 's/:[0-9]*(:)/\1\t/g'
sed: -e expression #1, char 19: invalid reference \1 on `s' command's RHS

但是我得到了一个错误。我确信我犯了一些语法错误,但我拼尽全力还是找到了它。

我也愿意接受更好的解决方案(比如 awk)。

答案1

您可以sed像这样使用--regex-extendedswitch:

echo somelongbullshit:888:morelongbullshitthatcanhaveanything | sed --regexp-extended 's/:[0-9]*(:)/\1\t/g'

答案2

  1. 并非所有版本sed都能识别制表符。因此请按键盘上的Ctrl+并按下 Tab 键。V

  2. 使用此命令

     $ echo "somelongbullshit:888:morelongbullshitthatcanhaveanything" | sed 's/\:/      /2'
     somelongbullshit:888    morelongbullshitthatcanhaveanything
    

相关内容