2015-05-13 51 views
5

Bash może generować wiele ciągów z pojedynczego, jeśli używasz składni {..., ...}. Jak tutaj:Jak wygenerować ciąg dla rozszerzenia tekstu bash?

$ echo pgdb{200,10{0,1}} 
pgdb200 pgdb100 pgdb101 

Czy jest jakiś sposób, aby zrobić listę ciągów i produkować (oby krótszy) ciąg znaków, na przetwarzanie przez ekspansji słowo bash będzie produkować oryginalnej listy (niekoniecznie w oryginalnej kolejności

? na przykład, chciałbym to narzędzie/algorytm, że biorąc pod uwagę:

  • postgresql
  • mysql
  • postgres
  • Miata

przyniosłoby (na przykład): {postgres{ql,},m{iata,ysql}}

Myślałem o użyciu Trie do reprezentowania ciągów wejściowych, ale nie można dowiedzieć się, jak przetworzyć ten Trie zbudować ciąg wyjściowy.

+1

Rozszerzanie nawiasów jest przeznaczone do interaktywnego użytku w celu zmniejszenia liczby pisowni, którą musisz wykonać. Jeśli masz już listę nazwisk w formularzu, który możesz podać do takiego narzędzia, po prostu skorzystaj z tej listy. Zmniejszenie jej do minimalnego rozszerzenia nawiasów tylko szkodzi czytelności. – chepner

+0

Wymagałoby to analizowania i porównywania każdej litery każdego słowa i byłoby znacznie trudniejszym zadaniem niż po prostu użycie wcześniej ustalonej listy. –

+0

@chepner my usecase służy do generowania listy w jednym miejscu i używania jej w innym. Interaktywnie. Nie mogę łatwo wyczyścić listy, ponieważ oba miejsca znajdują się za różnymi zaporami ogniowymi i naty. – someone

Odpowiedz

1
+0

To interesujące podejście, ale niestety algorytm nie jest naprawdę inteligentny. Nie może obsłużyć sensownie przypadków, w których podany zestaw łańcuchów ma zarówno wspólny przedrostek, jak i wspólny sufiks. – someone