Adventskalender-Alias-ABC: l

Smalltalk
Antworten
alberich
Beiträge: 189
Registriert: 27.12.2019 10:12:24

Adventskalender-Alias-ABC: l

Beitrag von alberich » 12.12.2020 08:40:40

Code: Alles auswählen

~ >> which l 
l: aliased to ls
Da passieren dann keine Tippfehler wie `sl'. Leider eigentlich. Denn ich habe Debiansl installiert. Also lasse ich manchmal einfach so zum Spaß die Eisenbahn fahren... :)

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Adventskalender-Alias-ABC: l

Beitrag von smutbert » 12.12.2020 13:03:37

Wieso nicht die Eisenbahn wenigstens im Schnitt jedes zehnte Mal fahren lassen und das in allem möglichen Varianten

Code: Alles auswählen

alias l='zufall=$(( RANDOM % 800))
	if test ${zufall} -lt 10 ; then
		sl
	elif test ${zufall} -lt 20 ; then
		sl -a
	elif test ${zufall} -lt 30 ; then
		sl -l
	elif test ${zufall} -lt 40 ; then
		sl -f
	elif test ${zufall} -lt 50 ; then
		sl -lf
	elif test ${zufall} -lt 60 ; then
		sl -af
	elif test ${zufall} -lt 70 ; then
		sl -al
	elif test ${zufall} -lt 80 ; then
		sl -alf
	else
		ls
	fi'
(Das geht bestimmt eleganter und so dass man dem Alias trotzdem noch Optionen für ls mitgeben kann, hmm.)

Der default in Debian, zumindest stand das (möglicherweise aber auskommentiert) von Beginn an in meiner .bashrc ist wohl

Code: Alles auswählen

alias l='l -CF'

Benutzeravatar
TRex
Moderator
Beiträge: 8074
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Adventskalender-Alias-ABC: l

Beitrag von TRex » 12.12.2020 13:09:45

Code: Alles auswählen

alias l='ls -larth'
long, all, reversed, ordered by time, human readable
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
MSfree
Beiträge: 10773
Registriert: 25.09.2007 19:59:30

Re: Adventskalender-Alias-ABC: l

Beitrag von MSfree » 12.12.2020 13:11:25

Im Laufe der Jahre zusammengetragen:

Code: Alles auswählen

alias l='ls -aCF'
alias la='ls -la'
alias ll='ls -oga'
alias ls='ls --color=auto'

Benutzeravatar
whisper
Beiträge: 3189
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von whisper » 12.12.2020 14:22:21

Meine L sind

Code: Alles auswählen

alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias lsd='ls -l |grep ^d'
alias lsr='ls -lSr'
alias lst='ls -R | grep ":$" | sed -e '\''s/:$//'\'' -e '\''s/[^-][^\/]*\//--/g'\'' -e '\''s/^/ /'\'' -e '\''s/-/|/'\'''
alias ltr='ls -ltr'
Sucht euch was aus

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von Meillo » 12.12.2020 20:18:29

@alberich und @smutbert: :THX: `sl' ist ein Must-Have auf meinen Systemen. :-D


ls-Aliase sind bei `l' recht offensichtlich. Bisher konnte ich mich nie dazu bewegen, nur `l' dafuer zu verwenden. Fuer den Adventskalender habe ich aber einen `l'-Alias angelegt, der mir alle real existierenden zwei Zeichen langen `l'-Befehle auflistet:

Code: Alles auswählen

:-Q alias l='for i in `echo $PATH|tr : " "`;do \ls -d1 $i/l?;done 2>/dev/null;alias|sed -n "s/^\(l.\)=.*/\1/p"'

:-Q l
/home/meillo/bin/l0
/home/meillo/bin/l5
/home/meillo/bin/lo
/usr/bin/ld
/usr/bin/lp
/usr/bin/lz
/bin/ln
/bin/ls
la
lh
ll
ls
Die Befehle in /usr/bin und in /bin sind Standardprogramme. Die Aliase am Ende sind alle fuer ls(1):

Code: Alles auswählen

:-Q alias | grep  ^l.=
la='ls -AF'
lh='ls -lhF --time-style=long-iso'
ll='ls -lF --time-style=long-iso'
ls='ls -F'
Frueher habe ich `-h' oft verwendet. Heute verwende ich stattdessen eher `du -m'.

Was ich sehr oft tippe, wofuer ich aber keinen Alias habe, ist: `ls -tr'.

Das `-F' und das (ordentliche) Datumsformat helfen mir deutlich.


Die drei Befehle in meinem persoenlichen ~/bin sind fuer Debianmmh. Sie machen auch Listings, aber keine Directory-Listings, sondern Mailordner-Listings. `l5' listet die letzten fuenf Mails des Ordners, `l0' listet so viele wie auf eine Terminalseite gehen. Realisiert habe ich das mit folgendem Shellscript:

Code: Alles auswählen

#!/bin/sh

num="`echo "$0" | sed 's,.*/,,; s,^[^0-9]*,,'`"

if [ x$num = x0 ] ; then
        num="`stty size`"
        num="${num% *}"
        num="`expr $num - 3`"
fi

exec scan "l:$num" "$@"

Die beiden Befehle sind nur Links auf das gleiche Script. Es gibt noch weitere Links: `l10', `l20', `l50'. Die erste Zeile extrahiert die Zahl aus dem Befehlsnamen. Bei `0' wird die Terminalzeilenanzahl mit stty(1) ermittelt.


`lo' dagegen listet die umgebenden Mails, naemlich die zehn vorigen und zwanzig ab der aktuellen: scan p:10 c:20. Das ist sinnvoll, wenn ich mich irgendwo inmitten eines Ordners befinde. Der Buchstabe `o' ist inspiriert von dem Befehl `o', der eine Erweiterung des Heirloom ed ist. Wenn man ed auf einem Zeilendrucker verwendet, hat man den Inhalt der Datei auf Papier. In einem Videoterminal hat man oefters das Beduerfnis, den Inhalt der Datei anzeigen zu lassen, was mit ed aber umstaendlich ist: -10,+10p. Gunnar Ritter hat beim Heirloom ed darum einen Befehl `o' eingebaut, der eine Bildschirmseite voll Umgebung der aktuellen Zeile ausgibt. Wenn man mit ed tatsaechlich arbeiten will, dann wird einem dieser Befehl ungemein hilfreich sein. `lo' macht fuer mich das Analoge bei mmh.

(Btw: Wer den Heirloom ed ausprobieren will, ohne die ganze Heirloom Toolchest zu installieren, kann diese von mir mal zusammengestellte Standalone-Version verwenden: http://hg.marmaro.de/heirloom-ed/ )


(Gerne haette ich `l' auch als Alias fuer lastlog(8) eingesetzt. Da dies aber nur auf einem gemeinsam genutzten Server interessant ist, interessiert das heute niemanden mehr. Auch gefallen haette mir `l' fuer logrotate(8), weil ich finde, dass dieses Tool viel generischer ist als es verwendet wird. Eigentlich sollte es `filerotate' heissen. Mit logrotate(8) muss ich mich selber aber auch erst mal noch genauer befassen.)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von Meillo » 12.12.2020 20:52:05

smutbert hat geschrieben: ↑ zum Beitrag ↑
12.12.2020 13:03:37
Wieso nicht die Eisenbahn wenigstens im Schnitt jedes zehnte Mal fahren lassen und das in allem möglichen Varianten

Code: Alles auswählen

alias l='zufall=$(( RANDOM % 800))
	if test ${zufall} -lt 10 ; then
		sl
	elif test ${zufall} -lt 20 ; then
		sl -a
	elif test ${zufall} -lt 30 ; then
		sl -l
	elif test ${zufall} -lt 40 ; then
		sl -f
	elif test ${zufall} -lt 50 ; then
		sl -lf
	elif test ${zufall} -lt 60 ; then
		sl -af
	elif test ${zufall} -lt 70 ; then
		sl -al
	elif test ${zufall} -lt 80 ; then
		sl -alf
	else
		ls
	fi'
smutbert hat mich dazu inspiriert:

Code: Alles auswählen

alias l='`yes ls|sed "1s,.*,sl,;10q"|sort -R|sed q`  -`man ls|col -b|sed -n "s/^ *-\([A-Za-z0-9]\).*/\1/p"|sort -R|sed \`expr $RANDOM % 4 + 1\`q|tr -d "\n"`'
Ich nenne es: `ls2k' (in Anlehnung an java2k). Viel Vergnuegen! :mrgreen:
Use ed once in a while!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Adventskalender-Alias-ABC: l

Beitrag von smutbert » 13.12.2020 10:52:26

Das ist cool, wobei ich den ersten Teil noch nicht ganz durchschaut habe. Ich sehe, dass das mit yes und den ersten beiden seds funktioniert, aber ich weiß noch nicht wieso.
Der zweite Teil mit dem Extrahieren der ls-Optionen aus der manpage ist sowieso genial.

edit:
Ok, das mit sort und dem zweiten sed habe ich doch noch kapiert, aber wieso das erste sed das macht, was es macht, ist mir immer noch nicht ganz klar.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von Meillo » 13.12.2020 11:30:19

smutbert hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 10:52:26
Das ist cool, wobei ich den ersten Teil noch nicht ganz durchschaut habe. Ich sehe, dass das mit yes und den ersten beiden seds funktioniert, aber ich weiß noch nicht wieso.
Der zweite Teil mit dem Extrahieren der ls-Optionen aus der manpage ist sowieso genial.

edit:
Ok, das mit sort und dem zweiten sed habe ich doch noch kapiert, aber wieso das erste sed das macht, was es macht, ist mir immer noch nicht ganz klar.
(Das mit dem `sed q' habe ich beim Buchstaben `h' erklaert.)


Zerlege den Befehl Stueck fuer Stueck:

Code: Alles auswählen

yes ls | sed "1s,.*,sl,; 10q"
Dir die Ausgabe anzuschauen hilft oft weiter, lenkt aber manchmal auch davon ab, einen Befehl Schritt fuer Schritt zu zerlegen, ganz stupide und mechanisch -- wie ein Computer.

Beschreibe Schritt fuer Schritt was die Teile tun. Ich helfe dann gerne weite.
Use ed once in a while!

tobo
Beiträge: 1992
Registriert: 10.12.2008 10:51:41

Re: Adventskalender-Alias-ABC: l

Beitrag von tobo » 13.12.2020 13:56:04

Naja, wenn da mal nicht auch ein bisschen auf "Verwirrung stiften" gesetzt wurde und die Ähnlichkeit von 1 und l ist möglicherweise auch nicht hilfreich!? Da braucht es klaren, lesbaren Code. Sowas z.B.: sed '\sgssgsg\ggg'

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von Meillo » 13.12.2020 14:17:18

tobo hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 13:56:04
Da braucht es klaren, lesbaren Code. Sowas z.B.: sed '\sgssgsg\ggg'
LOL! :THX:
Use ed once in a while!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Adventskalender-Alias-ABC: l

Beitrag von smutbert » 13.12.2020 14:22:26

tobo hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 13:56:04
[...] und die Ähnlichkeit von 1 und l ist möglicherweise auch nicht hilfreich!? [...]
:facepalm: genau das war es. (Ich war komplett auf ls fixiert.)
Ich frage mich gerade ob ich mich bei "sed "1s,ls,sl,;10q"" noch blöder angestellt hätte oder es schneller verstanden hätte.
tobo hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 13:56:04
Da braucht es klaren, lesbaren Code. Sowas z.B.: sed '\sgssgsg\ggg'
So, dag igt gemein, bei Meillog Code wuggte ich weniggteng, wag er macht, wenn auch nicht auf Anhieb warum, aber hier gtehe ich komplett daneben.
Zuletzt geändert von smutbert am 13.12.2020 14:32:28, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von Meillo » 13.12.2020 14:25:21

smutbert hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 14:22:26
tobo hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 13:56:04
[...] und die Ähnlichkeit von 1 und l ist möglicherweise auch nicht hilfreich!? [...]
:facepalm: genau das war es. (Ich war komplett auf ls fixiert.)
Ich frage mich gerade ob ich mich bei "sed "1s,ls,sl,;10q"" noch blöder angestellt hätte oder es schneller verstanden hätte.
Wenn ihr, wie ich, w3m in einem Terminal mit der Schrift Terminus verwenden wuerdet, dann haettet ihr keine Probleme `1' und `l' zu unterscheiden. :-P

Hier noch eine symmetrischere Variante:

Code: Alles auswählen

sed '1,1s,.*.,sl,1'
Die verwende ich naechstes Mal. :-D
Use ed once in a while!

tobo
Beiträge: 1992
Registriert: 10.12.2008 10:51:41

Re: Adventskalender-Alias-ABC: l

Beitrag von tobo » 13.12.2020 18:41:43

smutbert hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 14:22:26
tobo hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 13:56:04
Da braucht es klaren, lesbaren Code. Sowas z.B.: sed '\sgssgsg\ggg'
So, dag igt gemein, bei Meillog Code wuggte ich weniggteng, wag er macht, wenn auch nicht auf Anhieb warum, aber hier gtehe ich komplett daneben.
Wie ich sehe hast du die Wirkweise ja inzwischen herausgefunden.

Code: Alles auswählen

sed '\sgssgsg\ggg' 
    ## ist identisch zu
sed '/g/ s/s/g/g'
Um eine RegEx als Adresse anzugeben, muss man diese nicht unbedingt in / einschließen (/RegEx/), sondern kann das Begrenzungzeichen frei wählen, sofern vorne mit \ vorangestellt wird (z.B. \XRegExX). Und auch bei der Substitution ist die Begrenzung frei wählbar; kommt sie in der Ersetzung vor, dann muss sie gequotet werden. Das fehlende Leerzeichen ist optional.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Adventskalender-Alias-ABC: l

Beitrag von smutbert » 13.12.2020 20:59:09

Herausgefunden habe ich es durch Ausprobieren :wink: aber vielen Dank, dass ihr mir so auf die Sprünge helft. Darf ich noch einmal zusammenfassen, soweit ich es verstanden habe:

'/g/' ist das was du als Adresse bezeichnet hast und filtert einfach zeilenweise auf das Vorkommen von g?
Bei '\sgs' wählst du mit \s das s statt / als Trennzeichen (oder wie immer man das an der Stelle nennt).

Der Rest 's/s/g/g' ist eine einfache Ersetzung von s durch g mit dem g für global (alle Vorkommen in der Zeile zu behandeln)?
'sgsg\ggg' ist dasselbe mit g als Trennzeichen und deswegen muss das g durch das das Muster ersetzt wird, also das drittletzte g escaped werden.

Benutzeravatar
Meillo
Moderator
Beiträge: 8817
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Adventskalender-Alias-ABC: l

Beitrag von Meillo » 13.12.2020 21:05:42

smutbert hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 20:59:09
Herausgefunden habe ich es durch Ausprobieren :wink: aber vielen Dank, dass ihr mir so auf die Sprünge helft. Darf ich noch einmal zusammenfassen, soweit ich es verstanden habe:

'/g/' ist das was du als Adresse bezeichnet hast und filtert einfach zeilenweise auf das Vorkommen von g?
Bei '\sgs' wählst du mit \s das s statt / als Trennzeichen (oder wie immer man das an der Stelle nennt).

Der Rest 's/s/g/g' ist eine einfache Ersetzung von s durch g mit dem g für global (alle Vorkommen in der Zeile zu behandeln)?
'sgsg\ggg' ist dasselbe mit g als Trennzeichen und deswegen muss das g durch das das Muster ersetzt wird, also das drittletzte g escaped werden.
Alles korrekt und gut erklaert. ;-)
Use ed once in a while!

tobo
Beiträge: 1992
Registriert: 10.12.2008 10:51:41

Re: Adventskalender-Alias-ABC: l

Beitrag von tobo » 13.12.2020 22:25:11

smutbert hat geschrieben: ↑ zum Beitrag ↑
13.12.2020 20:59:09
Darf ich noch einmal zusammenfassen, soweit ich es verstanden habe:
Das ist so alles richtig. Die Substitution wird nur auf die Zeilen angewendet, die vorher durch die RegEx gefunden werden.
'/g/' ist das was du als Adresse bezeichnet hast
Es gibt verschiedene Adressen:
- <n> = Eine Zahl n, die Zeilennummer
- /RegEx/ = alle Zeilen, die auf die RegEx passen
- $ = die letzte Zeile

Man kann Adressen negieren:
- adr! = alle Zeilen außschließlich der in adr angegebenen Zeilen

und es gibt Adressbereiche, 2 Adressen durch Komma getrennt:.
- adr1,adr2 = alle Zeilen zwischen >=adr1 und <=adr2
- adr1,adr2! = alle Zeilen, außer die zwischen >=adr1 und <=adr2

und dann gibt es noch ein paar GNU-Erweiterungen (siehe Adressen unter man sed). Netterweise helfen einem diese Adressen so oder so ähnlich auch weiter im ed und vim.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Adventskalender-Alias-ABC: l

Beitrag von smutbert » 14.12.2020 21:56:50

Danke :THX:

Antworten