Eine Lösung, die sed verwendet und die 1. kürzeste Zeile aus der Datei enthält:
sed -e '1h;H;g;s/[^\n]/#/g;s/\(#*\)\n\1/\n/;G;/^\n/s/\n.*\n\(.*\)\n.*/\1/;s/.*\n//;h;$!d' your_file
So behalten Sie die letzte kürzeste Zeile der Datei:
sed -e '1h;G;h;s/[^\n]/#/g;s/\(#*\)\n\1/\n/;G;/^\n/s/\n.*\n\(.*\)\n.*/\1/;s/.*\n//;h;$!d' your_file
Bellow ist eine erläuterte Version der 1. kürzesten Zeile in Form einer sed-Skriptdatei, die folgendermaßen ausgeführt werden kann sed -f script your_file
:
# The hold space will contain the shortest line at the beginning and the ending of each cycle. # The 1st line is the shortest, so put it in the hold space so an empty line will not be returned. 1h # Append the current line to the shortest so far, remember these 2 lines in the hold space, and take a copy in the pattern space to work on them. H;g # Replace all chars by #. s/[^\n]/#/g # Delete the same number of # before and after the line delimiter. s/\(#*\)\n\1/\n/ # Append the 2 lines remembered in the hold space to the pattern space. G # If the hold space begin by a '\n', the current line was shorter, so keep it. /^\n/s/\n.*\n\(.*\)\n.*/\1/ # Else, the previous line was shorter, so keep it. s/.*\n// # Remember shortest in hold space. h # If last line, print it (delete everything else). $!d