한 번에 "8"을 "7"로 바꾸는 방법은 무엇입니까?

한 번에 "8"을 "7"로 바꾸는 방법은 무엇입니까?

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.

관련 정보