단일 열 출력을 목록으로 연결하는 방법은 무엇입니까?

단일 열 출력을 목록으로 연결하는 방법은 무엇입니까?

나는 다음을 사용하고 있습니다 :

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부분이 필요합니다 .lsls --colorgrep


다른 옵션

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 ....

위의 내용은 grepPerl Regular Expression Engine(PCRE)을 사용하는 기능을 활용합니다. 이는 패턴과 일치하는 문자열 만 반환 됨을 나타내는 로 -P전환됩니다 . 그런 다음 Perl의 뒤돌아보기 기능을 활용합니다. 따라서 로 시작하는 문자열을 찾으면 숫자( )로 시작하지 않는 문자열을 찾습니다 . 이는 반환된 문자열(숫자로 시작하지 않는 문자열)입니다.grep-ogrep/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.의 답변에 따르면 위 명령의 구문 분석된 출력에 문제가 있는 경우 lsBash 명령 앞에 을 붙일 수 있습니다. 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)

관련 정보