나는 다음을 사용하고 있습니다 :
ls /proc | grep -v "^[0-9].*"
숫자로 시작하지 않는 /proc의 모든 파일 및 디렉터리 목록을 가져옵니다. 출력은 단일 열 목록입니다. 즉, 다음과 같습니다.
acpi
asound
buddyinfo
bus
다중 열 또는 다중 항목 목록으로 만들려면 어떻게 해야 합니까? 예:
acpi asound buddyinfo bus
또는
acpi,asound,buddyinfo,bus
나는 시도했다:
$ ls /proc | grep -v "^[0-9].*" | column -c5
하지만 아직 1개의 열이 있습니다.
답변1
사용 xargs
:
$ command ls /proc | grep -v "^[0-9].*" | xargs
예를 들어 별칭이 출력에 인쇄되지 않는 이스케이프 시퀀스를 추가하고 어떻게든 검색하여 바람직하지 않은 결과를 생성하기 때문에 해당 command
부분이 필요합니다 .ls
ls --color
grep
다른 옵션
PWD
변경해 도 괜찮다면 다음 단계를 따르세요 .
$ cd /proc && echo [^0-9]*
다음 사항을 변경하고 싶지 않은 경우 PWD
:
$ pushd . &>/dev/null && cd /proc && echo [^0-9]* && popd &>/dev/null
또는:
$ echo /proc/[^0-9]* | sed 's!/proc/!!g'
답변2
긴 목록
grep 사용
쉘 확장을 사용하여 /proc
다음으로 파이프 할 수 있습니다 grep
.
$ echo /proc/* | grep -oP "(?<=/proc/)\D.*? " | paste -s -d ''
예
$ echo /proc/* | grep -oP "(?<=/proc/)\D.*? " | paste -s -d ''
acpi asound buddyinfo bus cgroups ....
위의 내용은 grep
Perl Regular Expression Engine(PCRE)을 사용하는 기능을 활용합니다. 이는 패턴과 일치하는 문자열 만 반환 됨을 나타내는 로 -P
전환됩니다 . 그런 다음 Perl의 뒤돌아보기 기능을 활용합니다. 따라서 로 시작하는 문자열을 찾으면 숫자( )로 시작하지 않는 문자열을 찾습니다 . 이는 반환된 문자열(숫자로 시작하지 않는 문자열)입니다.grep
-o
grep
/proc
/proc
\D
grep
이 붙여넣기는 결과 표시를 시작할 때 추가된 모든 줄 바꿈을 제거하여 약간 정리합니다.
sed 사용
이 방법의 대안은 sed
(hey, rhyme)을 사용하는 것입니다.
$ echo /proc/* | sed 's@/proc/[0-9]\+ @@g;s@/proc/@@g'
/proc/
이 방법은 & 숫자 & 공백으로 시작하는 모든 문자열을 찾아 무엇이든 대체하여 효과적으로 제거합니다. 그런 다음 sed
문자열에 대해 동일한 작업을 수행하는 다른 명령을 실행하면 /proc/
숫자가 아닌 시작 문자열만 남습니다.
여러 열
출력을 열로 "구성"하기 위해 이 paste
명령은 이 작업을 매우 쉽게 수행합니다. 여기서는 2개의 열을 수행하고 있지만 paste
추가 대시( )를 추가하여 더 많거나 적은 열을 생성하도록 명령을 변경할 수 있습니다 -
. 최종 column -t
힘 출력은 열에 정렬됩니다.
$ ls /proc | grep -v "^[0-9].*" | paste - - | column -t
예
출력의 처음 5줄은 head -5
.
$ ls /proc | grep -v "^[0-9].*" | paste - - |column -t | head -5
acpi asound
buddyinfo bus
cgroups cmdline
cpuinfo crypto
devices diskstats
4열에서도 마찬가지입니다.
$ ls /proc | grep -v "^[0-9].*" | paste - - - - |column -t | head -5
acpi asound buddyinfo bus
cgroups cmdline cpuinfo crypto
devices diskstats dma dri
driver execdomains fb filesystems
fs interrupts iomem ioports
노트:@JosephR.의 답변에 따르면 위 명령의 구문 분석된 출력에 문제가 있는 경우 ls
Bash 명령 앞에 을 붙일 수 있습니다. command
이렇게 하면 설정한 별칭을 우회할 수 있습니다 ls
.
예
$ command ls /proc | grep -v "^[0-9].*" | paste - - - - |column -t | head -5
acpi asound buddyinfo bus
cgroups cmdline cpuinfo crypto
devices diskstats dma dri
driver execdomains fb filesystems
fs interrupts iomem ioports
답변3
어때요?
ls /proc | grep -v "^[0-9].*" | perl -pe 's/\n/,/'
답변4
ls
터미널에 인쇄할 때만 출력을 열에 표시합니다. 출력이 파일 또는 파이프인 경우 ls
한 줄에 하나의 항목을 인쇄합니다 .
이 옵션을 사용하면 -C
출력 스트림 유형에 관계없이 열 단위로 인쇄할 수 있지만 이렇게 하면 사용이 불가능하거나 적어도 어려워집니다 grep
.
ls
이름이 숫자로 시작하는 파일을 무시하도록 지시할 수 있습니다 . 이는 ls /proc
프로세스 디렉터리가 없는 경우에만 출력 과 유사한 출력을 얻는 가장 간단한 방법입니다 .
ls -I '[0-9]*'
또는 나열할 항목을 지정할 수 있습니다.
(cd /proc && ls -d [!0-9]*)
항목만 원하고 모양이나 색상에 관심이 없다면 대신 쉘 와일드카드를 사용하십시오 ls
. 두 번째 명령은 zsh에만 해당됩니다.
(cd /proc && echo [!0-9]*)
echo /proc/[^0-9]*(:t)