Как получить новую строку в конце команды канала

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

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

Это - моя команда канала:

ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' 

И я хотел бы, чтобы вывод был как:

file1 file3
[user@linux]$

И не (что я на самом деле получаю:

file1 file3[user@linux]$
1
задан 16 November 2015 в 13:41

5 ответов

Что относительно:

ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' && echo " "
3
ответ дан 3 December 2019 в 06:21

Кажется, что Вы хотите получить только имена каталогов, раз так Вы можете использовать find:

find /share -maxdepth 1 -type d -printf '%f\n'

Пример:

% find /usr -maxdepth 1 -type d -printf '%f\n'
usr
include
lib
share
sbin
local
bin
games
lib32
src
<час>

Оригинальный ответ:

Использование интеллектуальная раковина как zsh или использование printf:

printf '%s\n' "$(ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ')"

Смотрят на help printf.

3
ответ дан 3 December 2019 в 06:21

Почему ls, grep, cut...?

Использование awk и find:

find /usr/share -maxdepth 1 -type d | awk -F/ '{printf "%s ",$NF} END {print ""}'
1
ответ дан 3 December 2019 в 06:21

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

Иоу не нуждаются в перекачанной по трубопроводу последовательности команды для этого; Вы можете использовать расширение имени файла Удара Случайно, Вам будет нужна перекачанная по трубопроводу последовательность команд для этого, так как, по-видимому, Вы не хотите печатать перемещение «/»:

echo */ | tr -d '/'
  • echo */: отпечатки */, который является globbing образцом, который расширен до любой папки / файл в текущем рабочем справочнике, заканчивающемся / (таким образом только к папкам);
  • tr -d '/': удаляет перемещение «/». Нет никакой озабоченности, которая «/» могла появиться в имени файла, так как «/» не действительный характер для имени файла.
% mkdir dir{1..3}
% touch file{1..3}
% tree
.
├── dir1
├── dir2
├── dir3
├── file1
├── file2
└── file3

3 directories, 3 files
% echo */ | tr -d '/'
dir1 dir2 dir3
%
1
ответ дан 3 December 2019 в 06:21

Самое простое решение состояло бы в том, чтобы просто добавить равнину echo команда без любых аргументов до конца команды:

ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' ; echo

, Если Вам не нравится, когда команды связаны с ;, Вы могли бы также использовать:

echo $(ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ')
1
ответ дан 3 December 2019 в 06:21

Другие вопросы по тегам:

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