
Ich habe 3 Dateien in einem Verzeichnis
MYO144064T
MYO144064TA
MYO144064TX
Wo sich die Ziffern und das 11. Zeichen ändern. In meinem CSH-Skript möchte ich die Buchstaben 'A' und 'X' wahrscheinlich mit grep extrahieren
Die Variable $study entspricht MYO144064
Was ich bisher geschafft habe, ist sehr umständlich
ls | grep $study | cut -c 11 | sed 's/\///'
Das gibt mir
A
X
Wie kann ich dies mit minimalen Prozessen und ohne die zusätzliche Leerzeile tun?
Antwort1
ls | grep -oP "(?<=$study.)[A-Z]$"
gibt jeden Großbuchstaben zurück, dem der Inhalt $study
plus ein beliebiges Zeichen ( T
in Ihrem Beispiel „das“) vorangestellt ist und auf den das Zeilenende folgt.
Die -P
Option (Perl-reguläre Ausdrücke) wird benötigt, um den positiven Lookbehind-Ausdruck verwenden zu können (?<=...)
, ist aber möglicherweise nicht auf allen Systemen und Plattformen verfügbar.
Antwort2
ls | grep $study | grep -o "[AX]$"
gibt nur das Ergebnis von 'A' oder 'X' als letztes Zeichen zurück
Antwort3
Eine perl
Lösung:
$ perl -nle 'print chop if length == 11' file
A
X
Oder wenn Sie Folgendes verwenden können bash
:
while read var
do
[ ${#var} -eq 11 ] && echo ${var:(-1)}
done < file