절단의 반대 명령이 존재합니까?

절단의 반대 명령이 존재합니까?

나는 cutLinux에서 -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원하는 것을 달성할 수 있는 몇 가지 방법이 있습니다.

  1. 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하여 더 잘 정렬되도록 하면 실패할 수 있습니다 . 대우 하고 달라집니다.lscutfoo<space>barfoo<space><space>bar

  2. awk그 변형은 각 입력 줄을 빈 필드로 분할하므로 원하는 필드만 인쇄하도록 지시할 수 있습니다.

    awk '{print $1,$2,$3,$4,$9}'
    
  3. 진주

    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. /두번째

관련 정보