Windows中的`tr`命令是什么?

时间:2015-03-27 01:48:24

标签: linux cmd tr

Linux中tr命令的Windows等价物是什么?

例如,tr可以用换行符替换所有冒号。可以在Windows中完成吗?

$ echo $PATH | tr ':' '\n'
/usr/local/bin
/usr/bin

7 个答案:

答案 0 :(得分:6)


在powershell中,我们已经拆分了 见这个例子

$a=( echo $env:Path | Out-String )
$a -split ";"

之前:

%SystemRoot%\system32\WindowsPowerShell\v1.0\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System
32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Prog
ram Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\Micros
oft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\010 Editor;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web P
ages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft\Web Platform
 Installer\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft Visual Studio\Common\Tools\Win
NT;C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files (x86)\Microsoft Visual Studio\Com
mon\Tools;C:\Program Files (x86)\Microsoft Visual Studio\VC98\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Com
mon Files\Intel\WirelessCommon\

后:

> %SystemRoot%\system32\WindowsPowerShell\v1.0\ C:\Windows\system32
> C:\Windows C:\Windows\System32\Wbem
> C:\Windows\System32\WindowsPowerShell\v1.0\ C:\Program
> Files\Intel\WiFi\bin\ C:\Program Files\Common
> Files\Intel\WirelessCommon\ C:\Program Files (x86)\ATI
> Technologies\ATI.ACE\Core-Static C:\Program Files
> (x86)\QuickTime\QTSystem\ C:\Program Files\Microsoft SQL
> Server\110\Tools\Binn\ C:\Program Files (x86)\010 Editor C:\Program
> Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\ C:\Program Files
> (x86)\Windows Kits\8.0\Windows Performance Toolkit\ C:\Program
> Files\Microsoft\Web Platform Installer\
> C:\Windows\System32\WindowsPowerShell\v1.0\ C:\Program Files
> (x86)\Microsoft Visual Studio\Common\Tools\WinNT C:\Program Files
> (x86)\Microsoft Visual Studio\Common\MSDev98\Bin C:\Program Files
> (x86)\Microsoft Visual Studio\Common\Tools C:\Program Files
> (x86)\Microsoft Visual Studio\VC98\bin C:\Program
> Files\Intel\WiFi\bin\ C:\Program Files\Common
> Files\Intel\WirelessCommon\

答案 1 :(得分:3)

有一个丑陋的批处理黑客:

echo "%path:;="&echo "%"

答案 2 :(得分:1)

现代Windows操作系统(Windows 7以上版本)中的tr相当于:

powershell -noprofile -command "$Input | foreach { write-output $_.Replace(<from-string> , <to-string> )}"

所以,在你的情况下:

path | powershell -noprofile -command "$Input | foreach { write-output $_.Replace(';',\"`r`n\")}"

或者,只需安装Cygwin即可获得大多数unix命令。

答案 3 :(得分:1)

“tr”的 Windows 10 等效项是“wsl tr”。

Windows 10 允许在命令提示符下调用 linux 命令,但性能损失很小。但是,它需要安装。

答案 4 :(得分:0)

在Windows上实际运行Windows版本的tr怎么样?无需学习新语法!

链接:https://docs.microsoft.com/en-us/windows/wsl/install-win10

在Windows 10上,可以启用Windows子系统Linux,然后安装轻量级的Ubuntu。

与WSL for Windows 7类似的工具也位于此处:https://www.microsoft.com/en-us/download/details.aspx?id=2391

优点:您可以获得tr,bash shell和Linux命令行工具的全部库。
缺点:您需要在WSL bash Shell中运行才能访问工具

答案 5 :(得分:0)

在Windows中没有直接的tr等效项,因此我制作了一个可以像tr命令一样使用的cmdlet(来自:http://satob.hatenablog.com/entry/2019/06/18/013811):

function tr {
  Param(
    [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
    [string] $TargetString,
    [Parameter(Mandatory=$true)]
    [string] $FromString,
    [Parameter(Mandatory=$true)]
    [string] $ToString
  )
  begin {
    # Split string into character array
    # [-split ""] splits a surrogate pair into two invalid characters,
    # so the code below is not suitable for this purpose
    # $FromStringArray = $FromString -split "";
    # $FromStringArray = $FromStringArray[1..($FromStringArray.length-2)];
    $FromStringArray = @();
    $FromStringBytes = [Text.Encoding]::UTF32.GetBytes($FromString);
    for ($i=0; $i -lt $FromStringBytes.length; $i+=4) {
         $FromStringArray += [Text.Encoding]::UTF32.GetString($FromStringBytes, $i, 4);
    }

    $ToStringArray = @();
    $ToStringBytes = [Text.Encoding]::UTF32.GetBytes($ToString);
    for ($i=0; $i -lt $ToStringBytes.length; $i+=4) {
         $ToStringArray += [Text.Encoding]::UTF32.GetString($ToStringBytes, $i, 4);
    }
  }
  process {
    for ($i=0; $i -lt $FromStringArray.Length -and $i -lt $ToStringArray.Length; $i++) {
        $TargetString = $TargetString.Replace($FromStringArray[$i],$ToStringArray[$i]);
    }
    $TargetString
  }
}

您可以像这样使用此cmdlet:

PS > echo $env:Path | tr -FromString ";" -ToString "`n"
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\WINDOWS\System32\OpenSSH\

答案 6 :(得分:0)

据我所知,tr的替代品并没有减少,但这对于您的用例来说简直而令人难忘:

echo $env:PATH.Replace(';',"`r`n")