Bash 명령에서 첫 단어를 빠르게 변경하는 방법은 무엇입니까? 번째 단어를 빠르게 바꾸고 싶은

Bash를 사용하여 워크 플로우를 조금 개선하고 싶습니다. 다른 실행 파일에 대해 동일한 명령을 자주 실행하고 싶다는 것을 알고 있습니다.

몇 가지 예 :

힘내 (두 번째 단어를 빠르게 바꾸고 싶은 곳) :

git diff     foo/bar.c
git checkout foo/bar.c

Cat / rm (첫 번째 단어 만 변경해야 함) :

cat foo/is/a/very/long/path/to/bar.c
rm  foo/is/a/very/long/path/to/bar.c

나는 Ctrl+를 a누른 다음 Del첫 단어를 제거 할 수 있다는 것을 알고 있지만 더 빠른 방법이 있는지 궁금합니다.



답변

!$ 이전 명령의 마지막 단어로 확장됩니다.

그래서 당신은 할 수 있습니다 :

cat foo/is/a/very/long/path/to/bar.c

rm !$

또는:

git diff foo/bar.c

git checkout !$

귀하의 예는 마지막 단어 만 반복했기 때문에 !$잘 작동했습니다. 실제로 반복하려는 많은 인수가 있고 첫 단어를 변경하고 싶을 !*경우을 사용할 수 있습니다 .이 명령은 0을 제외하고 이전 명령의 모든 단어로 확장됩니다.

bash매뉴얼 페이지 의 “히스토리 확장”섹션을 참조하십시오. 거기에는 많은 유연성이 있습니다.


답변

Ctrl+ a는 줄의 시작 부분으로 이동 한 다음 Alt+ d는 첫 단어를 삭제합니다.


답변

실제로 더 빠를 지 확실하지 않지만 이 기사, 특히 포인트 # 3을 참조하십시오 .

  1. ^ str1 ^ str2 ^를 사용하여 이전 명령의 문자열을 바꾸십시오.

다음 예제에서는 먼저 ls 명령을 실행하여 파일을 확인했습니다. 나중에 우리는 파일의 내용을보고 싶다는 것을 깨달았습니다. 전체 파일 이름을 다시 입력하는 대신 아래 표시된대로 이전 명령의 “ls”를 “cat”으로 바꿀 수 있습니다.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

답변

Alt+.

이전 명령 중 하나의 마지막 부분 만 반복해야하는 경우 Alt+ .를 사용 하여 기록의 마지막 행에서 가져온 마지막 인수를 붙여 넣을 수 있습니다 .

한 번 이상 누르면 이전 줄의 마지막 인수로 붙여 넣은 것을 대체합니다 …

예를 들어 마지막 두 명령이 다음과 같은 경우

cat foo/is/a/very/long/path/to/bar.c
pico foo/is/a/very/long/path/to/SomeWhereElse.c

셸에서 쓰고 +를 rm누르면 다음과 같이 나타납니다.Alt.

rm foo/is/a/very/long/path/to/SomeWhereElse.c

다시 누르면 Alt+ .대신 나타납니다

rm foo/is/a/very/long/path/to/bar.c

등등…


답변

@jjlin 답변 외에도 다음 팁에 관심이있을 수 있습니다.

  • Ctrl+ w왼쪽 단어를 삭제합니다
  • Ctrl+ k커서에서 명령 줄 끝까지 삭제
  • Ctrl+ u커서에서 명령 행 시작까지 삭제
  • Alt+ b커서를 한 단어 뒤로 이동
  • Alt+ f커서를 한 단어 앞으로 이동
  • $_ 이전 명령 행의 마지막 인수를 포함합니다

이에 대한 자세한 내용은 bash맨 페이지 의 “Readline Command Names”섹션을 참조하십시오 .

예 :

cat foo/is/a/very/long/path/to/bar.c
rm $_

답변

vi에 능숙하다면, 명령을 사용하여 bash (대부분의 쉘?)에서 vi 바인딩을 활성화 할 수 있습니다 set -o vi. 그런 다음 일반 vi 키를 사용하여 명령을 편집 할 수 있습니다. 첫 번째 예에서는 ^wcw“diff”를 삭제 한 다음 체크 아웃으로 변경할 수 있습니다.

커맨드 라인을 편집하는 것만으로 vi 키 바인딩을 배우는 것은 가치가 없지만, 이미 알고 있다면 깔끔한 생산성 향상 도구입니다.


답변

이 고양이를 벗기는 방법에는 여러 가지가 있습니다!

특정 문자열을 교체하려면 ^old^new^extra, 이전 명령을 대체 할 oldnew, 그리고 추가 extra. 원하는만큼 빨리 멈출 수 있습니다. 예를 들어 빈 문자열로 ^old대체 old하고 빈 문자열을 추가합니다 (필수적으로 삭제 old하고 더 이상 수행하지 않음).

1. ^diff^checkout
2. ^cat^rm

이것의 특히 유용한 변형 :

for i in `seq 1 10`; do echo something complicated; done
# inspect the output to see if it looks right
^echo

특정 단어를 바꾸려면 명령을 통해 !m:n-p단어를 참조하는 데 사용할 수 있습니다 (음수를 사용하여 현재 명령에서 다시 계산). 단일 단어 를 나타내 도록 부품을 생략하고 전체 명령을 나타 내기 위해 부품을 생략 할 수 있습니다 . 특수 형태 에 대한 , 이전 명령의 마지막 단어, 및 인수에 대한 (모든하지만 단어 이전 명령의)는 꽤 편리합니다.npm-p:m-p!!!-1!$!*0

1. !!:0 checkout !!:2-
2. rm !*

나는 종종이 두 가지를 모두 사용한다. zsh 키를 누르면 암호 항목을 확장하여 올바른 정보를 얻을 수 있으므로 zsh가 특히 좋습니다.

라인 편집으로이를 수행하는 방법은 여러 가지가 있습니다. 쉘의 키 바인딩을 읽으십시오.