
私はcut
Linuxで-c
フラグ付きコマンドを使用するのが好きです。ただし、デフォルトでは入力が与えられたら、実行するコマンドを見つけることに興味がありますcut
。
drwxrwxrwx 2 root root 4096 4096 4 20:15 bin
drwxrwxrwx 2 root root 4096 4096 4 20:15 Desktop
私はすべてを見たいです。とは別に「4096 4 20:15」。出力は次のとおりです。
drwxrwxrwx 2 root root bin
drwxrwxrwx 2 root root Desktop
意味があれば、文字xとyの間を文字通り切り取ることができるようにしたいです。
どんなアイデアがありますか?これが書くのが難しいスクリプトであるとは想像できませんが、コマンドがすでに存在する場合は喜んで使用します。
答え1
他の人が指摘したように、出力を解析しないでください。ls
。これを例として使用し、他のものを解析すると仮定すると、必要なものを達成するためのls
いくつかの方法があります。
cut
そして-d
-f
cut -d ' ' -f 1,2,3,4,9
から
man cut
:-d, --delimiter=DELIM use DELIM instead of TAB for field delimiter -f, --fields=LIST select only these fields; also print any line that contains no delimiter character, unless the -s option is specified
特に、連続したフィールド間のスペースの量を変更し
ls
てより良い位置合わせを行うと、失敗する可能性があります。扱い、変わります。ls
cut
foo<space>bar
foo<space><space>bar
awk
そのバリエーションは各入力行を空のフィールドに分割するため、必要なフィールドだけを印刷するように指示できます。awk '{print $1,$2,$3,$4,$9}'
真珠
perl -lane 'print "@F[0 .. 3,8]"'
答え2
cut
このオプションを使用して結果の逆数を取得できます--complement
。これcut
マニュアルページ(やや役に立たない)言った:
- 補足
complement the set of selected bytes, characters or fields
例えば、
$ echo The fifth and sixth words will be missing | cut -d ' ' -f 5-6 --complement The fifth and sixth be missing
説明する:
-d ' '
区切り文字を空白文字に設定-f 5-6
出力するフィールド5〜6を選択してください(「words will」)。--complement
選択したテキストの補数(アンチコード)を返します。
答え3
stat
交換を使用するls
ことは直接的な交換ではないので、構文解析に関するすべてのフレンドリーな警告についてls
その誘惑に感謝することができます。
ls -a
これは現在のディレクトリとほぼ同じです。
find . -maxdepth 1 -print0|xargs -0 stat --format="%A %U %G %n"
これが私が得ることができる最も近いものです:
find . -maxdepth 1 -print0\
|awk 'BEGIN{RS="\0";FS="/";ORS="\0"}{if(/\//){print $2}else{print}}'\
|xargs -0 stat --format="%A %U %G %n"\
|LC_COLLATE=C sort -k4
パラメータの代わりにパラメータを使用するには、次の関数.
に入力する必要があります。
function ls4up() {
find . -maxdepth 1 -print0\
|awk 'BEGIN{RS="\0";FS="/";ORS="\0"}{if(/^[^\/][^\/]*\//){print $2}else{print}}'\
|xargs -0 stat --format="%A %U %G %n"\
|LC_COLLATE=C sort -k4
}
これで、stat
出力や他のものを解析するのではなく、これを使用するのがどれほど簡単かがわかりますls
。 /セカンド