나는 cut
Linux에서 -c
플래그가 지정된 명령을 사용하는 것을 좋아합니다. 그러나 기본적으로 입력이 주어지면 실행할 명령을 찾는 데 관심이 있습니다 cut
.
drwxrwxrwx 2 root root 4096 4096 4 20:15 bin
drwxrwxrwx 2 root root 4096 4096 4 20:15 Desktop
나는 모든 것을 보고 싶다와는 별개로"4096 4 20:15". 출력은 다음과 같습니다.
drwxrwxrwx 2 root root bin
drwxrwxrwx 2 root root Desktop
의미가 있다면 문자 x와 y 사이를 문자 그대로 잘라낼 수 있기를 원합니다.
어떤 아이디어가 있나요? 이것이 작성하기 어려운 스크립트일 것이라고는 상상할 수 없지만 명령이 이미 존재한다면 기꺼이 사용하겠습니다.
답변1
다른 사람들이 지적했듯이,출력을 구문 분석하면 안 됩니다.ls
. 이것을 예시로 사용하고 다른 것을 구문 분석한다고 가정하면 ls
원하는 것을 달성할 수 있는 몇 가지 방법이 있습니다.
cut
그리고-d
그리고-f
cut -d ' ' -f 1,2,3,4,9
에서
man cut
:-d, --delimiter=DELIM use DELIM instead of TAB for field delimiter -f, --fields=LIST select only these fields; also print any line that contains no delimiter character, unless the -s option is specified
특히 연속된 필드 사이의 공백 양을 변경
ls
하여 더 잘 정렬되도록 하면 실패할 수 있습니다 . 대우 하고 달라집니다.ls
cut
foo<space>bar
foo<space><space>bar
awk
그 변형은 각 입력 줄을 빈 필드로 분할하므로 원하는 필드만 인쇄하도록 지시할 수 있습니다.awk '{print $1,$2,$3,$4,$9}'
진주
perl -lane 'print "@F[0 .. 3,8]"'
답변2
cut
이 옵션을 사용하여 결과의 역수를 얻을 수 있습니다 --complement
. 이것cut
매뉴얼 페이지(다소 도움이 되지 않는) 말했다:
- 보충
complement the set of selected bytes, characters or fields
예를 들어,
$ echo The fifth and sixth words will be missing | cut -d ' ' -f 5-6 --complement The fifth and sixth be missing
설명하다:
-d ' '
구분 기호를 공백 문자로 설정-f 5-6
출력할 필드 5~6을 선택하세요("words will").--complement
선택한 텍스트의 보수(안티코드)를 반환합니다.
답변3
stat
교체를 사용하는 ls
것은 직접적인 교체가 아니므로 구문 분석에 대한 모든 친근한 경고에 대해 ls
그 유혹에 감사할 수 있습니다...
ls -a
이는 현재 디렉터리의 와 거의 동일합니다.
find . -maxdepth 1 -print0|xargs -0 stat --format="%A %U %G %n"
이것이 내가 얻을 수 있는 가장 가까운 것입니다:
find . -maxdepth 1 -print0\
|awk 'BEGIN{RS="\0";FS="/";ORS="\0"}{if(/\//){print $2}else{print}}'\
|xargs -0 stat --format="%A %U %G %n"\
|LC_COLLATE=C sort -k4
이제 매개변수 대신 매개변수를 사용하려면 .
다음과 같은 함수에 입력해야 합니다.
function ls4up() {
find . -maxdepth 1 -print0\
|awk 'BEGIN{RS="\0";FS="/";ORS="\0"}{if(/^[^\/][^\/]*\//){print $2}else{print}}'\
|xargs -0 stat --format="%A %U %G %n"\
|LC_COLLATE=C sort -k4
}
이제 stat
출력이나 다른 것을 구문 분석하는 대신 이것을 사용하는 것이 얼마나 쉬운지 알 수 있습니다 ls
. /두번째