【问题标题】:How do I simultaneously replace ":" and ";" with a newline?如何同时替换“:”和“;”换行?
【发布时间】:2019-08-15 20:27:56
【问题描述】:

背景

tr 命令转换、删除或压缩标准输入中的字符。我正在尝试创建一个输出setenv 命令的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

/一些/秒/目录

/一些/第三个/目录

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

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

file:///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 的输出并在有“:”或“;”的位置插入换行符?

【问题讨论】:

    标签: alias csh setenv


    【解决方案1】:

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

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

    其中\. 找到一个点(需要转义,否则它会找到任何字符),\| 是 or 操作,也已转义,并且新行也必须将其 \\ 转义。

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2011-11-24
      • 1970-01-01
      • 2010-09-08
      • 2022-01-08
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多