명령줄에서 이전 명령의 문자열을 바꾸는 방법은 무엇입니까?

명령줄에서 이전 명령의 문자열을 바꾸는 방법은 무엇입니까?

명령을 실행한 다음 동일한 명령을 다시 실행하여 문자열 하나만 변경해야 합니다.

예를 들어 다음 명령을 실행합니다.

$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query

이제 거기에서 명령 기록으로 돌아가지 않고(위쪽 화살표를 통해) 또는 다른 문자열 code1로 바꿔야 합니다 .mycode

Bash에서 할 수 있나요?

답변1

스크립트 이름을 바꾸었지만 다음과 같은 옵션이 있습니다.

$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query

스크립트를 실행한 후 다음을 사용하십시오.

$ ^code1^code2

...결과는 다음과 같습니다.

./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code2 -t query

man bash"이벤트 표시기"를 검색하십시오.

^문자열1^문자열2^

빠른 교체. 마지막 명령을 반복하여 string1을 string2로 바꿉니다. !!:s/string1/string2/와 동일

@slm의 답변에서 방금 배운 전역 대체를 추가하도록 편집되었습니다.https://unix.stackexchange.com/a/116626/117549:

$ !!:gs/string1/string2

이는 다음과 같이 말합니다.

!! - recall the last command
g - perform the substitution over the whole line
s/string1/string2 - replace string1 with string2

답변2

bash 내장 기능을 fc사용하여 기록에서 명령을 찾고 선택적으로 편집/실행할 수 있습니다. help fc추가 문서를 작성하려면 bash 내장 기능을 사용하세요 .

fc -s code1=code2

이전 명령에서 발생한 code1을 모두 찾아 code2로 변경한 다음 새 명령을 실행합니다.

여러 개의 특수 문자를 변경해야 할 때 유용합니다. 이전 명령이 다음과 같다고 가정합니다.

$ java a/b/c/d

# Then,

fc -s /=.

# will produce
$ java a.b.c.d

관련 정보