Как мне одновременно заменить ":" и ";"с новой строкой? - PullRequest
0 голосов
/ 25 марта 2019

Фон

Команда tr переводит, удаляет или сжимает символы из стандартного ввода. Я пытаюсь создать псевдоним cshell , который выводит команду setenv таким образом, чтобы каждый файл или каталог в пути отображался в новой строке.

Другими словами, я хочу получить в этом примере вывод setenv:

PATH = / некоторые / реж: / некоторый / второй / директории: / некоторой / третьей / реж * * 1016

PROFILES = file: ///some/file/here.txt; file: ///some/second/file.xml; file: ///some/third/file/there.pl

Чтобы стать этим:

PATH = / some / dir

/ некоторые / второй / реж

/ некоторые / третий / реж

PROFILES = file: ///some/file/here.txt

Файл: ///some/second/file.xml

Файл: ///some/third/file/there.pl

Связанные псевдонимы, которые работают

Я создал псевдонимы, которые выводят отдельные переменные среды, как указано выше:

  1. Для ПУТИ: alias readablePath = 'echo "$PATH" | tr : '\'\\\n\'' '
  2. Для ПРОФИЛЕЙ: alias readableProfiles= 'echo "$PROFILES" | tr \; 'echo "$PATH" | tr : '\'\\\n\'' '

Попытки псевдонимов, которые не работают

Это псевдонимы, которые я пробовал возвращать tr: no match.

  1. alias readEnv 'echo "setenv" | tr [:\;] '\'\\\n\'' '
  2. alias readEnv 'echo setenv | tr [:\;] '\'\\\n\'' '
  3. alias readEnv 'echo setenv | tr [:\\;] '\'\\\n\'' '
  4. alias readEnv 'echo setenv | tr [:;] '\'\\\n\'' '

Это псевдонимы, которые я пробовал, которые возвращают строку "setenv".

  1. alias readEnv 'echo setenv | tr "[:;]" '\'\\\n\'' '
  2. alias readEnv 'echo "setenv" | tr "[:;]" '\'\\\n\'' '

Вопрос

Как мне создать псевдоним, который успешно принимает вывод setenv и вставляет новую строку, где есть ":" или ";"??

1 Ответ

1 голос
/ 25 марта 2019

Чтобы заменить несколько символов в псевдониме командной строки (unix / linux), лучше использовать sed и регулярные выражения, как в Поиск и замена на sed при наличии точек и подчеркиваний .
Так что-то вроде:

sed 's/\.\|,/\\n/g'

, где \. находит точку (необходимо экранировать, иначе он находит какой-либо символ), \| - это операция или, также экранируется, и новаялиния также должна иметь свой \\ экранированный.

...