8

PATH をテキスト ファイルに配置し、UNIX で単純なコマンドを使用して各パスを改行に出力したいと考えています。

私はそれを行うための長い道のりを見つけました...

cat Path.txt | awk -F\; '{print $1"\n", $2"\n", ... }'

ただし、これは非効率的であるように思われるため、区切り文字で区切られた各フィールドを手動で呼び出すことなく、毎回新しい行に結果をすばやく出力する方法が必要であることがわかっています。

4

6 に答える 6

17

さらに別の方法:

echo $PATH | tr : '\n'

また:

tr : '\n' <Path.txt
于 2012-10-23T23:45:18.523 に答える
2

tr ソリューションは正しいソリューションですが、 awk を使用する場合は、ループは必要ありません。

$ echo "$PATH"
/usr/local/bin:/usr/bin:/cygdrive/c/winnt/system32:/cygdrive/c/winnt

$ echo "$PATH" | awk -F: -v OFS="\n" '$1=$1'
/usr/local/bin
/usr/bin
/cygdrive/c/winnt/system32
/cygdrive/c/winnt
于 2012-10-24T03:26:40.553 に答える
0

PerlUNIX / UNIXライクの場合:

echo $PATH | perl -F: -ane '{print join "\n", @F}'

任意のOS(Windows XP、Linux、Minix、Solarisでテスト済み)の場合:

my $sep;
my $path;

if ($^O =~ /^MS/) {
    $sep = ";";
    $path = "Path";
}
else {
     $sep = ":";
     $path = "PATH";
}

print join "\n", split $sep, $ENV{$path} . "\n";

を使用している場合は、次のコードを試してください。

printf '%s\n' ${PATH//:/ }

これはbash パラメータ展開を使用します

于 2012-10-23T23:43:42.813 に答える
0

awk:

echo $PATH|awk -F: '{gsub(/:/,"\n");print}'

パール:

echo $PATH|perl -F: -lane 'foreach(@F){print $_}'
于 2012-10-24T04:54:33.343 に答える
0

これに使用する Perl スクリプトがあります。

#!/usr/bin/env perl
#
#   "@(#)$Id: echopath.pl,v 1.8 2011/08/22 22:15:53 jleffler Exp $"
#
#   Print the components of a PATH variable one per line.
#   If there are no colons in the arguments, assume that they are
#   the names of environment variables.

use strict;
use warnings;

@ARGV = $ENV{PATH} unless @ARGV;

foreach my $arg (@ARGV)
{
    my $var = $arg;
    $var = $ENV{$arg} if $arg =~ /^[A-Za-z_][A-Za-z_0-9]*$/;
    $var = $arg unless $var;
    my @lst = split /:/, $var;
    foreach my $val (@lst)
    {
        print "$val\n";
    }
}

私はそれを次のように呼び出します:

echopath $PATH
echopath PATH
echopath LD_LIBRARY_PATH
echopath CDPATH
echopath MANPATH
echopath $CLASSPATH

変数名または変数の値を指定できます。それは両方の方法で機能します。

于 2012-10-24T00:13:53.670 に答える
0

AWK の場合、以下に加えて:

echo $PATH | awk -vFS=':' -vOFS='\n' '$1=$1'

あなたはできる:

echo $PATH | awk -vRS=':' '1'
于 2012-10-24T05:00:08.480 に答える