sed неправильно удаляет обратную косую черту - PullRequest
0 голосов
/ 07 марта 2019
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"

Распечатывает структуру каталогов текущего каталога, что я и хочу. Пример:

.
 |-one
 |-two
 | |-two_2
 | |-two_1
 |-test_file

Однако, когда я помещаю его в файл псевдонимов (файл со всеми моими псевдонимами), примерно так:

alias ls_tmp="cd /tmp; find . | sed -e \"s/[^-][^\\/]*\\// |/g\" -e \"s/|\\([^ ]\\)/|-\\1/\""

, который загружается с помощью следующих команд sed:

// load alias
  sprintf(buf, "cat %s|grep \"^alias \"| sed -e \"s/=/ /\" | sed -e \"s/\\\\\\\\//g\"", FILE_NAME);
  f = popen(buf, "r");
  if (f == NULL) {
    fprintf(stderr, "error: failed to init alias commands.\n");
    return;
  }

, фактически выполненная команда

cd /tmp; find . | sed -e "s/[^-][^/]*// |/g" -e "s/|([^ ])/|-1/"

Обратите внимание, что все обратные косые черты были удалены, несмотря на то, что я избежал обратной косой черты, используя //.

Как мне сделать эту работу? Я в замешательстве относительно того, что

sed -e \"s/=/ /\" | sed -e \"s/\\\\\\\\//g

делает. Может быть, это связано с \\\\?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...