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
делает. Может быть, это связано с \\\\?