私は以下を使用しています:
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
部分が必要です。ls
ls --color
grep
その他のオプション
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 ....
上記はgrep
Perl Regular Expression Engine(PCRE)を使用する機能を利用しています。これは、パターンに一致する文字列のみが返されることを示すに-P
切り替わります。その後、Perlの振り返り機能を活用します。したがって、で始まる文字列を見つけると、数字()で始まらない文字列が見つかります。これは返された文字列(数字で始まらない文字列)です。grep
-o
grep
/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.の答えによれば、上記のコマンドの解析された出力に問題がある場合は、ls
Bashコマンドの前に を付けることができます。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
端末に印刷するときにのみ出力を列に表示します。出力がファイルまたはパイプの場合は、ls
1行に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)