sed와 sort를 사용하여 두 태그 사이의 텍스트를 가져와 알파벳순으로 정렬하려면 어떻게 해야 합니까?

sed와 sort를 사용하여 두 태그 사이의 텍스트를 가져와 알파벳순으로 정렬하려면 어떻게 해야 합니까?

나는 다음을 수행하고 싶습니다 :

  1. 두 태그 사이의 모든 텍스트를 가져옵니다.someFile.txt
  2. 텍스트를 다음과 같이 분할된 배열에 넣습니다.\n
  3. 배열을 알파벳순으로 정렬
  4. 두 태그 사이의 텍스트를 someFile.txt알파벳 버전으로 바꿉니다.

someFile.txt작동 전:

// __MARKER__
../library/_shared/_shared/components/InfoPill/InfoPill.stories
../library/_shared/_shared/components/IconChevronRightBlack/IconChevronRightBlack.stories
../library/_shared/_shared/components/ButtonPrimary/ButtonPrimary.stories
// __MARKER__

someFile.txt조작 후:

// __MARKER__
../library/_shared/_shared/components/ButtonPrimary/ButtonPrimary.stories
../library/_shared/_shared/components/IconChevronRightBlack/IconChevronRightBlack.stories
../library/_shared/_shared/components/InfoPill/InfoPill.stories
// __MARKER__

답변1

괜찮고 perl파일이 메모리 요구 사항을 충족할 만큼 작다면

$ perl -0777 -pe 'BEGIN{$m = "// __MARKER__\n"}
                  s|$m\K.*?(?=\n$m)|join "\n", sort split/\n/,$&|gse' ip.txt 
// __MARKER__
../library/_shared/_shared/components/ButtonPrimary/ButtonPrimary.stories
../library/_shared/_shared/components/IconChevronRightBlack/IconChevronRightBlack.stories
../library/_shared/_shared/components/InfoPill/InfoPill.stories
// __MARKER__
  • -0777전체 파일을 문자열로 읽습니다.
  • $m = "// __MARKER__\n"태그를 변수에 저장
  • $m\K.*?(?=\n$m)태그 사이의 문자열 캡처
  • join "\n", sort split/\n/,$&캡처된 문자열을 분할 \n한 다음 정렬하고, 마지막으로 배열 요소를 연결하여 단일 문자열을 얻습니다.
  • s.일치하는 수정자를 허용합니다.\n
  • e섹션의 코드 교체를 허용하는 수정자
  • -i내부 편집 옵션 사용

관련 정보