如何同时替换“:”和“;”用换行符?

时间:2019-03-25 14:48:12

标签: alias csh setenv

背景

https://docs.python.org/3/library/calendar.html#calendar.month_name命令可转换,删除或压缩标准输入中的字符。我正在尝试创建一个输出tr命令的cshell alias,以使路径中的每个文件或目录都显示在新行上。

换句话说,我希望此示例输出setenv

  

PATH = / some / dir:/ some / second / dir:/ some / third / dir

     

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

要成为这个:

  

PATH = / some / dir

     

/ some / second / dir

     

/ some / third / dir

     

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

     

file:///some/second/file.xml

     

file:///some/third/file/there.pl

有效的相关别名

我已经创建了别名,用于输出类似于上面的单个环境变量:

  1. 对于PATH: 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 个答案:

答案 0 :(得分:1)

要替换(unix / linux)命令行别名中的多个字符,您应该使用sed和正则表达式,如Search and replace with sed when dots and underscores are present中所示。
就像这样:

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

其中\.找到一个点(需要转义,需要找到任何字符),\|是or运算符,也转义了,并且新行还必须具有其{{1}逃脱了。