Mam skrypt, który wyświetla listę plików spełniających określone kryteria. Wyświetla tylko nazwy plików i jest niepotrzebny fragment tekstu.
Przykładowy ciąg to:
[gg]_Magi_-_13_[DB38165F].mkv
To, co chciałbym osiągnąć w wyniku, to:
[gg]_Magi_-_13
Udało mi się zastąpić podkreślenia, ale nie udało mi się pomyślnie przyciąć pliku [CRC32] .mkv. Ograniczam też liczbę znaków i umieszczam wielokropek na końcu, jeśli rozciągają się one ponad 28 znaków, ale nawet jeśli nie przekracza 28 znaków, nadal dołącza wielokropek na końcu.
Kodem tego jest:
print substr( $0, 0, 28 )"[…]"}
Pomoc w jednym z tych problemów byłaby bardzo mile widziana.
[blahblah] blahblahblahblahblah 01
I[blahblah] blahblahblahblahblah 02
oba stają się[blahblah] blahblahblahblahb...
(już nie różnymi plikami)Odpowiedzi:
Myślę, że najkrótszym rozwiązaniem spełniającym wszystkie kryteria jest właśnie to
źródło
bash
to również dwie linie czystego , co jest prawdopodobnie jeszcze krótsze, nie mówiąc już o szybszym. Zobacz moją odpowiedź .Pierwszy bit usuwa paski
_[blah].mkv
, a drugi bit drukuje pierwsze 28 znaków i umieszcza je...
na końcu - ale jeśli ciąg znaków ma mniej niż 28 znaków, drukuje tylko nazwę pozbawionego pliku, bez dodawania elips.Jeśli rozszerzenie pliku nie zawsze będzie oznaczać * .mkv, możesz użyć tego (w sed,
$
oznacza „do końca linii”):źródło
sed
odrobinę przesady w przypadku tak całkiem podstawowej manipulacji ciągiem. Zobacz moją odpowiedź dla dwóch linii czystych,bash
które osiągają ten sam wynik.Chociaż
awk
,sed
a firma ma swoje zalety, nie są one potrzebne do tego. Możesz łatwo osiągnąć wszystko, o co prosiłeś, używając tylkobash
operacji na łańcuchach i dopasowywania wzorców. Zakładając, że przypisałeś nazwę pliku do$name
:odetnie typ pliku i CRC w nawiasach
$name
. Jeśli chcesz mieć 100% pewność, że odetniesz tylko CRC, możesz użyć rozszerzonego wyrażenia regularnego zamiast powyższego:Obcinanie nazw dłuższych niż 28 znaków jest następnie osiągane przez:
- dwa wiersze
bash
łącznie (nie licząc logiki, pętli lub innych, aby uzyskać nazwy plików do var i kod wyjściowy, oczywiście), bez zewnętrznych elementów. Główną zaletą jest to, że kod błyskawicznie płonie, ponieważ powłoka nigdy nie musi uruchamiać zewnętrznych plików binarnych.źródło
Wypróbuj tę funkcję bash (ostrzeżenie: nie testowano):
źródło
Nie najczystsze rozwiązanie, ale możesz to zrobić:
EDYCJA: Meh, podrap tę odpowiedź. Nie da ci elipsy.
źródło