Как показать только последние k столбцов в ls -l?

Мне нравится ограничивать столбцы, показанные в команде ls -l , устраняя первые 4 столбца.

ls -lh показывает:

 drwxr-sr-x 20 gamma alpha 4.0K May 22 13:18 Desktop drwxr-sr-x 3 gamma alpha 22 Oct 6 2014 Eclipse -rw-r--r-- 1 gamma alpha 28K Jul 11 2014 fire drwxr-sr-x 5 gamma alpha 48 Mar 31 2014 lb_deployment 

Чтобы устранить первые четыре столбца, я попробовал ls -lh | cut -d " " -f5- ls -lh | cut -d " " -f5- . Но он не ведет себя так, как хотелось бы:

 4.0K May 22 13:18 Desktop alpha 22 Oct 6 2014 Eclipse alpha 28K Jul 11 2014 fire alpha 48 Mar 31 2014 lb_deployment 

Мне нравится выглядеть так:

 4.0K May 22 13:18 Desktop 22 Oct 6 2014 Eclipse 28K Jul 11 2014 fire 48 Mar 31 2014 lb_deployment 

Причина, по которой он не ведет себя по своему желанию, заключается в том, что в cut я определял разделитель как пустое пространство ( -d " " ), но поскольку число ссылок (второй столбец из \ls -lh ) первого файла равно 2 -digit number (20), ls -lh добавляет еще одно пустое пространство в счетчик ссылок файлов с 1-разрядным счетчиком ссылок для настройки позиций столбцов. И это приводит к тому, что cut не ведет себя так, как хотелось бы.

Есть какие нибудь идеи как это починить?

  • Листинг файлов Linux между двумя датами без сенсорной команды
  • Клавишу привязки экрана требуется дополнительная клавиша Enter (RET)
  • список папок и их содержимое
  • Невозможно перечислить каталог изнутри, только извне
  • Символ, который будет отображаться первым в выводе `ls`?
  • Что на самом деле выводит «ls -dired-l» или «ls -D -l»?
  • ls занимает много времени в небольшом каталоге
  • Как получить точный размер файла и имя файла?
  • 4 Solutions collect form web for “Как показать только последние k столбцов в ls -l?”

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

    Нет возможности опускать столбцы с разрешениями и ссылками. Поскольку первый столбец, который вы хотите сохранить, может начинаться с пробела (для выравнивания по правому краю), вы не можете использовать переход от пробела к не-пробелу в качестве критерия начала. Вместо этого используйте правый край последнего столбца, чтобы исключить столбцы, которые вы не хотите. Это безопасно, потому что первые два столбца не могут содержать встроенные пробелы.

     ls -lhog | sed 's/^[^ ][^ ]* *[^ ][^ ]* //' 

    Объяснение команды sed:

    • s/ REGEXP / REPLACEMENT / заменяет первое вхождение указанного регулярного выражения на каждую строку указанным замещающим текстом. Здесь текст замены пуст.
    • ^ в начале регулярного выражения делает его совпадающим только в начале строки.
    • [^ ][^ ]* соответствует любой непустой последовательности символов, отличных от пробела.
    • Таким образом команда sed удаляет первую и вторую последовательности без пробелов, а также следующее пространство (но только одно пространство в конце).

    Это работает для меня:

     ls -lhn | sed -r 's#^\S+(\s+\S+){3}##' 

    Дополнительный флаг -n в ls превращает имена пользователей и групп в числовые идентификаторы. В результате мы получаем известное количество полей:

     -rwxr-xr-x 1 1001 1001 1.4K Mar 23 18:07 something.sh 

    Пробелы между каждым столбцом являются переменными, но это то, что ls использует для выравнивания столбцов, поэтому мы не можем просто слепо разбить его. Я решил лишить ведущий блок разрешений, за которым следуют три группы пробельных текстов, а затем не-пробельный текст , соответствующий счету ссылок, uid и gid соответственно. Это оставляет пробел, отделяющий gid от файлов без изменений, чтобы выравнивание продолжало работать. Регулярное выражение sed реализует это удаление шаблонов. #...#...# содержит разделители ( совпадение и замена ), а флаг -r позволяет использовать расширенные регулярные выражения. Рассекая то, что у нас есть совпадение начала строки; \S+ соответствует одному или нескольким символам без пробелов и \s+ соответствует одному или нескольким символам пробела; скобки (...) группируют эти два элемента вместе, а фигурные скобки {3} указывают, что группа должна повторяться три раза.

      4.0K Jun 6 2014 template 4.0K May 21 17:35 stuff 0 Mar 16 09:46 Items 1.4K Mar 23 18:07 something.sh 24K May 19 14:45 curtain 

    Присоединившись к хору, вы также можете использовать awk для удаления нужных столбцов:

     [jis@localhost ~]$ ls -lh | awk '{$1=$2=$3=$4="";print}' 4.0K Aug 19 2014 Desktop 4.0K Jan 8 22:39 dir1 4.0K Feb 5 20:41 Documents 12K May 22 19:31 Downloads 4.0K Aug 19 2014 Music 4.0K May 3 20:00 Pictures 4.0K Aug 19 2014 Public 115K May 9 09:05 something.bin 4.0K Aug 19 2014 Templates 1 Dec 12 07:01 testLink -> . 4.0K Aug 19 2014 Videos [jis@localhost ~]$ 

    Отличное решение с использованием grep:

     ls -lhn | grep -oP "^([[:graph:]]+\s){4}\K.+" 

    Вот,

     [[:graph:]] ==> all printed characters (ie no spaces, newlines) \s ==> space {4} ==> exactly four matches 
    Linux и Unix - лучшая ОС в мире.