입력 순서를 어떻게 바꾸나요?

입력 순서를 어떻게 바꾸나요?

다음 코드는 처음부터 마지막까지 입력을 누를 때 역방향 출력을 제공하므로 입력을 반대로 해야 합니다. 어떻게 뒤집거나 뒤집을 수 있나요?

2019-05-23_07:52:04에 수정됨

(printf 'g?%s?m0\n' 0005 0004 0003 0002 0001 ; printf 'wq\n') | ed -s file.txt

그러나 내가 하고 싶은 일은 다음과 같습니다.

(printf 'g?%s?m0\n' 0001 0002 0003 0004 0005 ; printf 'wq\n') | ed -s file.txt

그리고 다음과 같이 상단에 출력 시퀀스를 가져옵니다 file.txt.

0001
0002
0003
0004
0005

file.txt은 재생 목록이며 ffmpeg위의 0으로 채워진 숫자는 선택된 일부 비디오 파일 이름입니다. 재생목록에 이미 많은 파일 이름/동영상이 있는데 컴파일하기 전에 그 중 일부를 맨 위로 이동하고 싶습니다. 그러나 printf처음부터 끝까지 정렬해야 하는 경우에는 명령에서 요구하는 대로 역순으로 입력할 필요가 없습니다.

2019-05-23_07:54:27에 업데이트됨

$ cat file.txt
5575
3585
0004
7774
0003
5385
0001
8658
0002
0005

$ (printf 'g?%s?m0\n' 0001 0002 0003 0004 0005 ; printf 'wq\n') | ed -s file.txt

$ cat file.txt
0005
0004
0003
0002
0001
9374
4845
4834
4883
5848

마지막 cat명령과 출력 순서를 기록해 두십시오.

답변1

내 조언이 tac효과가 있지만 아마도 당신이 그것을 더 어렵게 만들고 있다고 생각합니다.

가 있고 시작 부분에 몇 줄 (예: a의 줄) file.txt을 추가하려는 경우 간단히 다음을 수행할 수 있습니다.file.txtheader_file.txt

cat header_file.txt file.txt > new_playlist.txt

그리고 해냈습니다.

답변2

( printf 'g?%s?m0\n' 0005 0004 0003 0002 0001 | tac ; printf 'wq\n' ) | ed -s file.txt

이렇게 하면 ed처음 생성된 명령이 반전됩니다 printf.

답변3

행을 맨 아래로 하나씩 이동한 다음(원하는 순서 유지) 행별로 맨 위 행으로 이동하는 대신 그룹으로 맨 위로 이동할 수 있습니다. 한 번에 한 단계씩 진행하세요.

  1. 자리 표시자 줄을 삽입하고(내용은 무엇이든 가능합니다. 가장 간단한 것은 빈 줄입니다) 선택한 줄을 파일 끝으로 이동합니다 m$. (참고: g?...?역방향 검색을 좀 더 전통적인 검색으로 변경했습니다 g/.../. 검색 방향은 실제로 중요하지 않습니다.)

    $ { printf '$a\n\n.\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf ',p\nq\n'; } | ed -s file.txt
    5575
    3585
    7774
    5385
    8658
    
    0001
    0002
    0003
    0004
    0005
    
  2. kx이제 다음을 사용하여 행의 주소를 x지정 $하고 맨 위로 이동할 수 있도록 자리 표시자 행에 마커( )를 추가합니다 'x,$m0.

    $ { printf '$a\n\n.\nkx\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf \''x,$m0\n,p\nq\n'; } | ed -s file.txt
    
    0001
    0002
    0003
    0004
    0005
    5575
    3585
    7774
    5385
    8658
    
  3. 마지막으로 자리 표시자를 제거해야 합니다(이제 1번째 줄).

    $ { printf '$a\n\n.\nkx\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf \''x,$m0\n1d\n,p\nq\n'; } | ed -s file.txt
    0001
    0002
    0003
    0004
    0005
    5575
    3585
    7774
    5385
    8658
    

함께 모아서 내부 편집을 ,p위해 교체합니다.wq

$ cat file.txt
5575
3585
0004
7774
0003
5385
0001
8658
0002
0005
$
$ { printf '$a\n\n.\nkx\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf \''x,$m0\n1d\n,wq\n'; } | ed -s file.txt
$
$ cat file.txt
0001
0002
0003
0004
0005
5575
3585
7774
5385
8658

관련 정보