Ответ 1
С разрезом:
$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev
t1_t2_t3
rev меняет направление каждой строки.
3-
в -f3-
означает от 3-го поля до конца строки (это начало строки через третье-последнее поле в тексте без текста).
Я пытаюсь разобрать имена файлов в определенном каталоге. Имена файлов имеют формат:
token1_token2_token3_token(N-1)_token(N).sh
Мне нужно вырезать маркеры, используя разделитель '_'
, и нужно взять строку, за исключением двух последних токенов. В вышеприведенном примере вывод должен быть token1_token2_token3
.
Количество токенов не фиксировано. Я попытался сделать это с помощью опции -f#-
команды cut
, но не нашел никакого решения. Любые идеи?
С разрезом:
$ echo t1_t2_t3_tn1_tn2.sh | rev | cut -d_ -f3- | rev
t1_t2_t3
rev меняет направление каждой строки.
3-
в -f3-
означает от 3-го поля до конца строки (это начало строки через третье-последнее поле в тексте без текста).
Вы можете использовать подстановку параметров POSIX:
$ name="t1_t2_t3_tn1_tn2.sh"
$ name=${name%_*_*}
$ echo $name
t1_t2_t3
Это невозможно сделать с помощью cut
. Как вы можете использовать sed
или awk
sed -r 's/(_[^_]+){2}$//g'
Просто другой способ написать ysth answer
echo "t1_t2_t3_tn1_tn2.sh" | rev | cut -d "_" -f1,2 - дополнение | ред