Как извлечь предыдущие строки в данном каталоге

Это работает в Bash и Korn, также может идти от более высоких к более низким числам. Наверное, не самый быстрый или красивый, но работает достаточно хорошо. Также обрабатывает негативы.

function num_range {
   # Return a range of whole numbers from beginning value to ending value.
   # >>> num_range start end
   # start: Whole number to start with.
   # end: Whole number to end with.
   typeset s e v
   s=${1}
   e=${2}
   if (( ${e} >= ${s} )); then
      v=${s}
      while (( ${v} <= ${e} )); do
         echo ${v}
         ((v=v+1))
      done
   elif (( ${e} < ${s} )); then
      v=${s}
      while (( ${v} >= ${e} )); do
         echo ${v}
         ((v=v-1))
      done
   fi
}

function test_num_range {
   num_range 1 3 | egrep "1|2|3" | assert_lc 3
   num_range 1 3 | head -1 | assert_eq 1
   num_range -1 1 | head -1 | assert_eq "-1"
   num_range 3 1 | egrep "1|2|3" | assert_lc 3
   num_range 3 1 | head -1 | assert_eq 3
   num_range 1 -1 | tail -1 | assert_eq "-1"
}
-1
задан yonan2236 15 January 2019 в 16:22
поделиться

4 ответа

string.Split и TakeWhile могут вам помочь

var resultArray = str.Split(new []{@"/"},StringSplitOptions.RemoveEmptyEntries)
                                  .TakeWhile(x=>!x.Equals("distributions"));

Вывод

<root> 
win 
<usr> 

Обновление на основе комментариев

Если вам нужно Весь путь, основанный до «распределения», можно использовать

var result = str.Split(new []{@"distributions"},StringSplitOptions.RemoveEmptyEntries)
                                .First();

Вывод

/<root>/win/<usr>/
0
ответ дан Anu Viswan 15 January 2019 в 16:22
поделиться

В чем проблема старого доброго пути?

var s = "/<root>/win/<usr>/distributions/<dbms>/<repository>/<port.....";
var result = s.Substring(0, s.IndexOf("distributions"));

или s.Substring(0, s.IndexOf("/distributions/")+1), если этот текст может появиться и в другой форме ...

0
ответ дан ZorgoZ 15 January 2019 в 16:22
поделиться

Предполагая, что вы действительно хотите получить путь до этой точки, я бы порекомендовал использовать здесь регулярные выражения, вот как я бы это сделал.

   Regex regex = new Regex(@".+?(?=distributions)");
   Debug.WriteLine(regex.Match("/<root>/win/<usr>/distributions/<dbms>/<repository>").Value);

это выводит /<root>/win/<usr>/

0
ответ дан nalnpir 15 January 2019 в 16:22
поделиться

string.split ('/') помещает каждый «компонент» пути (или любую строку) в массив, разделяя их по разделителю (/ здесь). Вы могли бы затем пройти через это.

0
ответ дан Narcil 15 January 2019 в 16:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: