패턴이 포함된 첫 번째 줄 뒤의 줄을 삭제 invHn3ion?
한 다음 첫 번째 줄을 파일 끝으로 이동하려면 어떻게 해야 합니까?
이 모든 표현은 어디서 배울 수 있나요?
답변1
이보다 더 빠르고 쉬운 키 입력이 가능하지만 제한된 vi
기술을 사용하면 다음과 같습니다.
invHn3ion으로 이동하시겠습니까?
/invHn3ion?
한 줄 아래로 이동
j
이 줄 삭제
dd
첫 번째 행으로 이동
1G
이 줄 삭제
dd
파일 끝으로 이동
G
반죽
p
구하다
ZZ
답변2
더 간단한 것부터 시작해 보겠습니다. vi 편집기에서 첫 번째 줄을 끝으로 이동하려면 명령 ex
( m
이동)을 사용합니다.
:1m$
인수는 1
소스 범위이며 첫 번째 줄입니다. 범위 2,15m$
또는 패턴 일치를 사용할 수 있습니다 /a.*bc/m$
. 대상은 $
파일의 마지막 줄을 나타냅니다. 이 m
명령은 움직이는 재료를 배치합니다.뒤쪽에대상 위치.
라인 0은 없지만 대상 0은 파일의 상단을 지정합니다. 따라서 선을 원래 위치로 다시 이동하려면 다음을 수행하십시오.
:$m0
즉, 마지막 행을 이동합니다.뒤쪽에가상의 라인 0(라인 1 앞).
좋아요, 그러면 패턴과 일치하는 첫 번째 줄을 이동하면 어떨까요 invHn3ion
? 첫째, 현재 위치는 어디든 될 수 있다고 생각한다. 현재 위치가 아닌 첫 번째 행부터 검색을 시작하려고 합니다.
:1/invHn3ion/m$
여기서 일어나는 일은 실제로 m
address 매개변수에서 작동하는 것 입니다 /invHn3ion/
. 이는 1
중복된 주소이므로 평가 후 폐기 됩니다 . 두 개의 개별 명령을 사용하여 동일한 효과를 얻을 수 있습니다.
:1
:/invHn3ion/m$
이 명령에는 이동보다는 복사하는 m
형제(전송)가 있습니다 .t
- 바라보다Ex에서 주소 지정"명령은 0개, 1개 또는 2개의 주소를 사용합니다..."라는 단락으로 시작하는 POSIX 표준 섹션입니다.
답변3
첫 번째 행을 마지막 행으로 이동하려면 sed
시도해 볼 수도 있습니다.
예를 들어
$ sed -n '1p' file >> file && sed -i '1d' file
편집하다:
$ sed -i '1h;1d;$G' file
대체 GNU sed 스크립트입니다. Plan 9에서는 "-i" 옵션을 사용할 수 없습니다.
답변4
sed의 경우 명령은 다음과 같습니다.
sed '/invHn3ion?/{h;d}; ${g}' FILE
그리고 내가 아는 한, sed 구문은 vi 구문과 매우 유사합니다.
이것을 /PATTERN/으로 읽으십시오. PATTERN이 발견되면 명령을 실행하십시오. h:= 패턴을 복사하여 공간을 확보하고, d:= 라인을 삭제하십시오. $는 정규식의 일부가 아닌 경우 파일의 마지막 줄을 나타냅니다. 따라서 마지막 줄에서 g:=는 예약된 공간의 내용을 가져오고 이전에 저장된 패턴을 인쇄합니다.
sed/awk/perl 정규식에 대한 튜토리얼에서 이에 대해 배울 수 있습니다. vi/vim에는 YT 비디오와 책도 있습니다.