単一の熱出力をリストにリンクする方法は?

単一の熱出力をリストにリンクする方法は?

私は以下を使用しています:

ls /proc | grep -v "^[0-9].*"

数字で始まらない/ procのすべてのファイルとディレクトリのリストを取得します。出力は単一列のリストです。つまり、次のようになります。

acpi
asound
buddyinfo
bus

複数列または複数項目のリストにするにはどうすればよいですか?例:

acpi asound buddyinfo bus

または

acpi,asound,buddyinfo,bus

私は試した:

$ ls /proc | grep -v "^[0-9].*" | column -c5

しかし、まだ1つの列があります。

答え1

使用xargs:

$ command ls /proc | grep -v "^[0-9].*" | xargs

たとえば、エイリアスが出力に印刷されないエスケープシーケンスを追加し、何らかの方法で検索して望ましくない結果を生成するため、そのcommand部分が必要です。lsls --colorgrep


その他のオプション

PWD変更しても問題ない場合は、次の手順に従ってください。

$ cd /proc && echo [^0-9]*

以下を変更したくない場合PWD:

$ pushd . &>/dev/null && cd /proc && echo [^0-9]* && popd &>/dev/null

または:

$ echo /proc/[^0-9]* | sed 's!/proc/!!g'

答え2

長いリスト

grepを使う

シェル拡張を使用して/proc次のようにパイプできますgrep

$ echo /proc/* | grep -oP "(?<=/proc/)\D.*? " | paste -s -d ''

はい

$ echo /proc/* | grep -oP "(?<=/proc/)\D.*? " | paste -s -d ''
acpi asound buddyinfo bus cgroups ....

上記はgrepPerl Regular Expression Engine(PCRE)を使用する機能を利用しています。これは、パターンに一致する文字列のみが返されることを示すに-P切り替わります。その後、Perlの振り返り機能を活用します。したがって、で始まる文字列を見つけると、数字()で始まらない文字列が見つかります。これは返された文字列(数字で始まらない文字列)です。grep-ogrep/proc/proc\D

grepこのペーストは、結果の表示を開始したときに追加されたすべての改行を削除して少しクリーンアップします。

sedを使う

この方法の代替は、sed(hey、rhyme)を使用することです。

$ echo /proc/* | sed 's@/proc/[0-9]\+ @@g;s@/proc/@@g'

/proc/このメソッドは、&数字&スペースで始まるすべての文字列を検索し、何でも置き換えて効果的に削除します。その後、sed文字列に対して同じ操作を実行する別のコマンドを実行すると、数字では/proc/なく開始文字列だけが残ります。

複数列

出力を列に「設定」するために、このpasteコマンドはこれを非常に簡単に実行します。ここでは2つの列を実行していますが、paste追加のダッシュ()を追加して、より多くまたは少ない列を生成するようにコマンドを変更できます-。最終column -t力出力は列に整列される。

$ ls /proc | grep -v "^[0-9].*" | paste - - | column -t

はい

出力の最初の5行はhead -5

$ ls /proc | grep -v "^[0-9].*" | paste - - |column -t | head -5
acpi           asound
buddyinfo      bus
cgroups        cmdline
cpuinfo        crypto
devices        diskstats

4列でも同様です。

$ ls /proc | grep -v "^[0-9].*" | paste - - - - |column -t | head -5
acpi           asound         buddyinfo     bus
cgroups        cmdline        cpuinfo       crypto
devices        diskstats      dma           dri
driver         execdomains    fb            filesystems
fs             interrupts     iomem         ioports

メモ:@JosephR.の答えによれば、上記のコマンドの解析された出力に問題がある場合は、lsBashコマンドの前に を付けることができます。commandこれにより、設定したエイリアスをバイパスできますls

はい

$ command ls /proc | grep -v "^[0-9].*" | paste - - - - |column -t | head -5
acpi           asound         buddyinfo     bus
cgroups        cmdline        cpuinfo       crypto
devices        diskstats      dma           dri
driver         execdomains    fb            filesystems
fs             interrupts     iomem         ioports

答え3

どうですか?

ls /proc | grep -v "^[0-9].*" | perl -pe 's/\n/,/'

答え4

ls端末に印刷するときにのみ出力を列に表示します。出力がファイルまたはパイプの場合は、ls1行に1つの項目を印刷します。

このオプションを使用すると、-C出力ストリームの種類に関係なく列単位で印刷できますが、これにより使用できないか、少なくとも難しくなりますgrep

ls名前が数字で始まるファイルを無視するように指示できます。これはls /proc、プロセスディレクトリがない場合にのみ出力に似た出力を取得する最も簡単な方法です。

ls -I '[0-9]*'

または、リストする項目を指定できます。

(cd /proc && ls -d [!0-9]*)

アイテムだけが欲しく、形や色に興味がない場合は、代わりにシェルワイルドカードを使用してくださいls。 2番目のコマンドはzsh専用です。

(cd /proc && echo [!0-9]*)
echo /proc/[^0-9]*(:t)

関連情報