![使用 sed 替换子字符串](https://linux22.com/image/989129/%E4%BD%BF%E7%94%A8%20sed%20%E6%9B%BF%E6%8D%A2%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
所以我得到了一条看起来像这样的线
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-extended
switch:
echo somelongbullshit:888:morelongbullshitthatcanhaveanything | sed --regexp-extended 's/:[0-9]*(:)/\1\t/g'
答案2
并非所有版本
sed
都能识别制表符。因此请按键盘上的Ctrl+并按下 Tab 键。V使用此命令
$ echo "somelongbullshit:888:morelongbullshitthatcanhaveanything" | sed 's/\:/ /2' somelongbullshit:888 morelongbullshitthatcanhaveanything