단일 쉼표로 구분된 목록에 모든 파일 시스템을 사전순으로 나열하고 싶습니다. 나는 다음 명령을 사용하고 있습니다 :
cat /proc/filesystems | sed 's/nodev//' | sed 's/,$//'
내 출력은 다음과 같습니다
sysfs
rootfs
ramfs
bdev
proc
cgroup
cpuset
tmpfs
devtmpfs
debugfs
securityfs
sockfs
pipefs
anon_inodefs
devpts
ext3
ext2
ext4
hugetlbfs
vfat
ecryptfs
fuseblk
fuse
fusectl
pstore
mqueue
binfmt_misc
vboxsf
각 파일 시스템을 쉼표로 구분하여 한 줄의 출력으로 어떻게 변경할 수 있습니까?
나는 다음을 사용하여 그것의 일부를 알아 냈습니다 xargs
.
cat /proc/filesystems | sed 's/nodev//' | xargs | sed -e 's/ /,/g'
이제 출력을 사전순으로 형식화하고 싶습니다.
답변1
awk를 사용하세요
awk '{printf "%s%s",(NR>1?",":""),$NF;} END{print""}' /proc/filesystems
sed 사용
sed -r 's/^nodev//; s/^[[:blank:]]*//; H;1h;$!d;x; s/\n/,/g' /proc/filesystems
어떻게 작동하나요?
s/^nodev//
이것은
nodev
모든 줄의 시작 부분에서 제거됩니다.s/^[[:blank:]]*//
이렇게 하면 각 줄의 선행 공백이 제거됩니다.
H
그러면 현재 행이 예약된 공간에 추가됩니다.
1h
첫 번째 행에 있는 경우 예약된 공간을 이 행으로 덮어씁니다.
$!d
마지막 줄에 있지 않다면 패턴 공간을 제거하고 다음 줄에서 시작하세요.
x; s/\n/,/g
우리가 여기까지 오면 우리는 마지막 팀 중 하나가 될 거예요. 이 경우 예약된 공간을 패턴 공간으로 이동하고 모든 줄 바꿈을 쉼표로 바꿉니다.
이를 이해하려면 H;1h;$!d;x
전체 파일을 읽는다는 의미의 awk 관용어를 인식하는 것이 도움이 됩니다.
보충: 정렬
이름 정렬:
awk '{print $NF;}' /proc/filesystems | sort | awk '{printf "%s%s",(NR>1?",":""),$NF;} END{print""}'
답변2
paste
이 목적으로 사용되는 도구는 다음과 같습니다.
sed 's/.*[[:blank:]]//' /proc/filesystems | paste -sd,