Linux 터미널에서 처음에 다음 명령을 입력했습니다.
tail -n +80 numbers.txt
내가 실수를 했다는 사실을 깨닫고 실제로 +80 대신 +70을 사용하고 싶었기 때문에 수정하고 싶었습니다. 이렇게 하려면 커서를 숫자 "8"로 이동하고 "7"을 입력하고 "8" 앞에 "7"을 삽입하면 결과는 "780"이 됩니다. "70"을 얻으려면 "8"을 제거해야 합니다. 그러나 이 과정은 느린 것 같습니다. 단순히 "8"을 "7"로 바꾸는 것처럼 한 단계로 "8"을 "7"로 직접 바꿀 수 있는 방법이 있나요?
답변1
Bash에서 기록 확장을 활성화하면(기본적으로 활성화되어 있지만 일부는 비활성화되어 있음) 입력은 ^old^new
대체가 적용된 마지막 명령을 다시 실행합니다(약어라고 생각합니다 !:s/old/new/
). 따라서 귀하의 경우 ^8^7
전체 명령을 탐색하기 위해 화살표 키를 사용할 필요도 없습니다.
을 입력하세요새로운 tail -n +70
명령을 누른 후 Alt.이전 명령의 마지막 인수를 삽입하는 것이 이전 명령을 편집하는 것보다 빠를 수 있습니다. 마찬가지로 tail -n +70 $_
동일한 작업을 수행해야 합니다.
(더 복잡한 변경의 경우: 키를 누르면 Ctrlx명령 Ctrle을 편집하고 즉시 커밋할 수 있는 기본 편집기($VISUAL)가 열립니다.)
답변2
bash를 사용한다고 가정하면,오버레이 모드기본적으로 비활성화되어 있으며 바로가기에 바인딩되지 않습니다.
오버레이 모드를 전환합니다. 명시적인 양수 인수를 사용하여 재정의 모드로 전환합니다. 양수가 아닌 명시적인 숫자 인수를 사용하면 삽입 모드로 전환됩니다. 이 명령은
emacs
모드에만 영향을 미칩니다.vi
모드는 실제로 다른 방식으로 재정의됩니다. 각 호출은readline()
삽입 모드에서 시작됩니다.
self-insert
오버레이 모드에서는 텍스트를 오른쪽으로 밀어내는 대신 문자가 반드시 해당 지점의 텍스트를 대체합니다.backward-delete-char
점 앞의 문자는 공백으로 바꿔야 합니다 .기본적으로 이 명령은 바인딩되지 않습니다.
키 바인딩을 추가하고 활성화한 다음 작업이 끝나면 다시 비활성화할 수 있지만 가장 좋은 방법은 다음을 사용하는 것입니다.delete-char
대신 기본 바인딩은 다음과 같습니다 Ctrld.
그 시점에서 문자를 삭제합니다. [...]
커서가 켜져 있으면 를 8
눌러 Ctrld삭제한 다음 7을 입력하세요.
존재하다vi 모드, 이미 8
: 에 있을 때 <Esc>r7
. 또는 <Esc>F8r7
커서를 첫 번째 항목(줄 끝에서 시작)으로 이동한 8
다음 교체하여 모든 작업을 수행할 수 있습니다 7
.