Итак, у меня есть строка, которая выглядит следующим образом:
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).
Можно использовать sed
как это с --regex-extended
переключатель:
echo somelongbullshit:888:morelongbullshitthatcanhaveanything | sed --regexp-extended 's/:[0-9]*(:)/\1\t/g'
Не все версии sed
распознают вкладку. так нажатие Ctrl + V и клавиша Tab нажатия с Вашей клавиатуры.
использование эта команда
$ echo "somelongbullshit:888:morelongbullshitthatcanhaveanything" | sed 's/\:/ /2'
somelongbullshit:888 morelongbullshitthatcanhaveanything