Вывод wc -l без расширения файла

#linux #bash #cut #file-extension #wc

#linux #bash #вырезать #расширение файла #wc

Вопрос:

У меня есть следующая строка:

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

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

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

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

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

Ответ №1:

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

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

Комментарии:

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

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

3. Это правда. Теперь я заменил rev на sed. Тот же вывод, но меньше кода.

Ответ №2:

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

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

Ответ №3:

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

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

Ответ №4:

Лучший подход с использованием правильного типа mime (какое расширение 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, не тестировался, не стесняйтесь адаптировать / улучшать / изменять

Комментарии:

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