Использование sed для обрезки начала stdout - PullRequest
0 голосов
/ 28 марта 2019

Я пишу небольшой скрипт, чтобы вывести список всех каталогов, используемых в системе macos. В Macos есть простой инструмент под названием sharing -l, который перечислит все пути после его объединения с sharing -l | grep path Проблема в том, что вывод выглядит следующим образом:

path: /Volumes/Storage A/File Server/

и мне нужно, чтобы это выглядело так

/Volumes/Storage\ A/File\ Server/

Таким образом, пробелы должны быть экранированы, а начало строки с путем: и пробелы должны быть обрезаны. Я часами возился с sed, но я просто не знаю достаточно, чтобы сделать все это в одной команде. Я надеюсь добавить что-нибудь к концу sharing -l | grep path

Ответы [ 3 ]

0 голосов
/ 28 марта 2019

Не могли бы вы попробовать следующее.

sharing -l | awk '{$2=$2"\\";$3=$3"\\";sub(/^path: +/,"")} 1'
0 голосов
/ 28 марта 2019

Если вам не нужны пробелы:

$ sharing -l | sed -n 's/^path:[[:space:]]*//p'
/Volumes/Storage A/File Server/

и если вы делаете:

$ sharing -l |  awk 'sub(/^path:[[:space:]]*/,""){gsub(/[[:space:]]/,"\\\\&"); print}'
/Volumes/Storage\ A/File\ Server/
0 голосов
/ 28 марта 2019

Вы можете использовать это:

sharing -l | sed -En '/^path:/{ s/^path:[[:blank:]]*//; s/[[:blank:]]+/\\&/g; p;}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...