2016-10-18 9 views
2

У меня есть следующие строки:Выход туалет -l без файла-расширения

wc -l ./*.txt | sort -rn 

я хочу, чтобы сократить расширение файла. Итак, с этим кодом у меня есть вывод: number filename.txt

для всех моих .txt-файлов в.-Каталоге. Но я хочу выход без расширения файла, например: number filename

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

wc -l ./*.txt | sort -rn | cut -f 1 -d '.' 

ответ

2

Предполагая, что у вас нет перевода строки в вашем имени файла вы можете использовать sed вырезать окончание .txt:

wc -l ./*.txt | sort -rn | sed 's/\.txt$//' 
+0

Спасибо за помощь, я использовал rev-command, но sed также работает! – ipo

+0

Это ваш выбор, но вместо единственного 'sed', использующего' rev + cut + rev' (3 команды), совершенно ненужно и неэффективно. – anubhava

+1

Thats true. Я заменил rev теперь на sed. Тот же вывод, но меньше кода. – ipo

0

Лучший подход с использованием соответствующего типа мим (что является продолжением tar.gz или подобных нескольких расширений?)

#!/bin/bash 

for file; do 
    case $(file -b $file) in 
     *ASCII*) echo "this is ascii" ;; 
     *PDF*) echo "this is pdf" ;; 
     *)  echo "other cases" ;; 
    esac 
done 

Это POC, не проверял, не стесняйтесь адаптировать/улучшить/изменить

+0

это не совсем то, что я хотел, но спасибо за вашу помощь. – ipo

1

К сожалению, cut не имеет синтаксиса для извлечения столбцов в соответствии с индексом с конца. Один (несколько неуклюжей) Хитрость заключается в том, чтобы использовать rev чтобы изменить линию, применить cut к нему, а затем rev его обратно:

wc -l ./*.txt | sort -rn | rev | cut -d'.' -f2- | rev 
+1

отлично, что работает! Хорошая идея с командой rev. – ipo

1

Использование sed более обобщенным образом, чтобы отрезать все, что расширение файлы имеют:

$ wc -l *.txt | sort -rn | sed 's/\.[^\.]*$//' 
14 total 
    8 woc 
    3 456_base 
    3 123_base 
    0 empty_base 
+0

Спасибо за помощь, sed также работает! – ipo