Задать вопрос
@pixik

Как в консоли сделать замену подстрок в Linux?

Добрый день!
Не знаю, как написать команду для sed, чтобы вставить вначало строки 2 слеша.
есть строка типа:
int i;
   cout << "hello!" << endl;
   printf("%s", "hello");
   printf("%s", "world");

Как получить такой результат:
int i;
//   cout << "hello!" << endl;
//   printf("%s", "hello");
   printf("%s", "world");

Непонимаю момент, как вставить именно вначало той строки, которая подходит по регекспу.
шаблон примерно такой
[любой символ]*КОНКРЕТНАЯ_ПОДСТРОКА[любой симовол до конца строки]
  • Вопрос задан
  • 451 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Предположим, у вас есть файл test.txt с указанным текстом, тогда

sed -r "2,3s/(.*)/\/\/\1/g" test.txt

Расшифровка:
берем текст между 2,3 строками - .*
Заключаем его в скобки (.*) - теперь мы можем его вызвать через back reference \1
добавляем два экранированных слеша и бэкреференс \/\/\1

если нужно изменить сам файл - в вызов sed добавить sed -i
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pixik Автор вопроса
Быстро не смог найти как это можно сделать. пришлось удалять.
sed '/hello/d' test.txt
было:
int i;
cout << "hello!" << endl;
printf("%s", "hello");
printf("%s", "world");

cтало:
int i;
printf("%s", "world");
Ответ написан
Комментировать
@abcd0x00
func()
{
    cat <<EOF
int i;
   cout << "hello!" << endl;
   printf("%s", "hello");
   printf("%s", "world");
EOF
}

func

func | sed '/hello/ s%^%//%'


[guest@localhost sh]$ func()
> {
>     cat <<EOF
> int i;
>    cout << "hello!" << endl;
>    printf("%s", "hello");
>    printf("%s", "world");
> EOF
> }
[guest@localhost sh]$ 
[guest@localhost sh]$ func
int i;
   cout << "hello!" << endl;
   printf("%s", "hello");
   printf("%s", "world");
[guest@localhost sh]$ 
[guest@localhost sh]$ func | sed '/hello/ s%^%//%'
int i;
//   cout << "hello!" << endl;
//   printf("%s", "hello");
   printf("%s", "world");
[guest@localhost sh]$
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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