예를 들어, 다음 코드는 다음을 수행할 수 있습니다.
[anony@mous-pc ~]$ (printf 'g?%s?m0\n' 008 006 004 002 ; printf 'wq\n') | ed -s file.txt
...안에 있는 모든 숫자를 선택하세요...
[anony@mous-pc ~]$ cat some.txt
005
003
110
069
002
008
004
245
009
007
006
...다음과 같이 실행 코드에 지정된 정확한 순서대로 원하는 숫자(또는 다른 문자열)를 맨 위로 이동합니다.
[anony@mous-pc ~]$ cat some.txt
002
004
006
008
005
003
110
069
245
009
007
숫자가 .txt의 위쪽이 아닌 아래쪽에 정렬되도록 이 코드를 어떻게 바꿀 수 있나요?
답변1
0
스크립트를 ed
로 변경합니다 $
. $
편집 버퍼의 마지막 줄을 지정합니다.
$ { printf 'g?%s?m$\n' 008 006 004 002; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
008
006
004
002
역순(질문의 순서)으로 적용하려면 패턴 목록을 역순으로 바꿔야 합니다.
$ { printf 'g?%s?m$\n' 002 004 006 008; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
002
004
006
008
아니면 그 문제에 관해서는
{ printf 'g?%s?m$\n' 008 006 004 002 | tac; echo 'wq'; } | ed -s file.txt
tac
... GNU coreutils가 설치된 경우 . 일부 시스템(BSD) tail -r
에서는 tac
.
답변2
라인을 남쪽으로 이동해야 하는지 아니면 그대로 유지해야 하는지에 따라 별도의 용기에 보관하십시오. 그런 다음 모든 줄이 이렇게 표시되면 원하는 순서로 인쇄합니다.
$ perl -ne 'push @{/_00[2468]$/ ? \@A : \@B}, $_}{print @B, @A' input.txt
posix sed를 사용하여 이 작업을 수행할 수도 있습니다.
$ sed -ne '
/_00[2468]$/s//&/w data2468
//!p
$r data2468
' input.txt