코드가 실행되는 순서대로 특정 텍스트가 포함된 줄을 파일 상단으로 이동하려면 어떻게 해야 합니까?

코드가 실행되는 순서대로 특정 텍스트가 포함된 줄을 파일 상단으로 이동하려면 어떻게 해야 합니까?

코드가 실행되는 순서대로 특정 텍스트가 포함된 줄을 파일 상단으로 이동하려면 어떻게 해야 합니까?

이것은 내 코드입니다.

printf 'g?_001\|_002\|_003\|_004\|_005?m0\nwq\n' | ed -s target_file

(크레딧은 다음과 같습니다.강철 드라이버이 지점까지 가도록 도와주세요. 이 사이트의 정말 놀라운 사용자입니다! )

그러면 다음과 같이 맨 위로 이동됩니다.

name_003
name_005
name_004
name_002
name_001

아니면 원래 순서와 상관없이 맨 위로 이동하세요.

printf하지만 in 및 ed 와 동일한 순서로 배치해야 하므로 code이 경우 예를 들면 다음과 같습니다.

name_001
name_002
name_003
name_004
name_005

누구든지 및 에 대해 잘 알고 printf있습니까 ed?

답변1

별도의 이동 명령을 사용하십시오.

ex -sc 'g?_005?m0' -c 'g?_004?m0' -c 'g?_003?m0' -c 'g?_002?m0' -c 'g?_001?m0' -c wq target_file

알아채다:

  • 대신 저는 ex여기(실제로는 Vim)를 사용하고 있습니다 ed. options을 사용하여 명령줄에서 ex 명령을 지정할 수 있으므로 -c그럴 printf필요가 없습니다.
  • 패턴은 역순이어야 합니다( 005먼저 위로 이동한 다음 , 004아래로 밀고 005, 다음으로 , 아래 로 003밀고 , ...).004005

printf및 를 사용하면 ed아마도 다음과 같습니다.

(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') |
  ed -s target_file

관련 정보