Extrahieren Sie einen Teil der Zeichenfolge mit grep

Extrahieren Sie einen Teil der Zeichenfolge mit grep

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 $studyplus ein beliebiges Zeichen ( Tin Ihrem Beispiel „das“) vorangestellt ist und auf den das Zeilenende folgt.

Die -POption (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 perlLö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

verwandte Informationen