다음 코드는 처음부터 마지막까지 입력을 누를 때 역방향 출력을 제공하므로 입력을 반대로 해야 합니다. 어떻게 뒤집거나 뒤집을 수 있나요?
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.txt
header_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
행을 맨 아래로 하나씩 이동한 다음(원하는 순서 유지) 행별로 맨 위 행으로 이동하는 대신 그룹으로 맨 위로 이동할 수 있습니다. 한 번에 한 단계씩 진행하세요.
자리 표시자 줄을 삽입하고(내용은 무엇이든 가능합니다. 가장 간단한 것은 빈 줄입니다) 선택한 줄을 파일 끝으로 이동합니다
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
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
마지막으로 자리 표시자를 제거해야 합니다(이제 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