Rád používám cut
příkaz v Linuxu pomocí -c
vlajka. Zajímá mě však nalezení příkazu, který dělá sadu inverzní k cut
. V podstatě, vzhledem k zadání:
drwxrwxrwx 2 root root 4096 4096 4 20:15 bin
drwxrwxrwx 2 root root 4096 4096 4 20:15 Desktop
Chci vidět všechno kromě „4096 4 20:15“. Zde je výstup:
drwxrwxrwx 2 root root bin
drwxrwxrwx 2 root root Desktop
Chci být schopen doslova stříhat mezi znaky x a y, pokud to dává smysl.
Nějaké nápady? Nedokážu si představit, že by bylo těžké napsat skript, ale pokud pro něj již existuje příkaz, rád bych ho použil.
Přijatá odpověď:
Jak poukázali jiní, neměli byste analyzovat výstup ls
. Za předpokladu, že používáte ls
pouze jako příklad a bude analyzovat něco jiného, existuje několik způsobů, jak dělat to, co chcete:
-
cut
s-d
a-f
cut -d ' ' -f 1,2,3,4,9
z
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
Konkrétně pro
ls
toto pravděpodobně selže, protožels
změní množství mezer mezi po sobě jdoucími poli, aby se lépe zarovnaly.cut
zachází sfoo<space>bar
afoo<space><space>bar
jinak. -
awk
a jeho varianty rozdělují každý vstupní řádek na pole na prázdném místě, takže mu můžete říct, aby tiskl pouze pole, která chcete:awk '{print $1,$2,$3,$4,$9}'
-
Perl
perl -lane 'print "@F[0 .. 3,8]"'