Замена подстроки с помощью 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).

0
задан 10 April 2016 в 12:19

2 ответа

Можно использовать sed как это с --regex-extended переключатель:

echo somelongbullshit:888:morelongbullshitthatcanhaveanything | sed --regexp-extended 's/:[0-9]*(:)/\1\t/g'
1
ответ дан 10 April 2016 в 22:19
  • 1
    IT РАБОТАЛ! Человек спасибо Вы являетесь удивительными. Мне жаль, что у меня не было Вашего компьютерного знания..., возможно, когда-нибудь lol – vince 19 August 2017 в 15:11
  1. Не все версии sed распознают вкладку. так нажатие Ctrl + V и клавиша Tab нажатия с Вашей клавиатуры.

  2. использование эта команда

     $ echo "somelongbullshit:888:morelongbullshitthatcanhaveanything" | sed 's/\:/      /2'
     somelongbullshit:888    morelongbullshitthatcanhaveanything
    
0
ответ дан 10 April 2016 в 22:19
  • 1
    Оболочка является сценарием оболочки – George Nostradamos 19 August 2017 в 10:07

Другие вопросы по тегам:

Похожие вопросы: