BASH 기록 조작: 검색 교체

BASH 기록 조작: 검색 교체

BASH에는 기록에서 볼 수 없는 정말 편리한 매개변수/변수 확장 기능이 있습니다. 나는 역사와 BASH 자체에 대한 매뉴얼 페이지를 확인했습니다. 거기는 아니고...아마 제가 놓쳤던 것 같아요.

예: 저는 ssh를 많이 사용하는데 변수 확장을 사용하면 이 작업을 수행할 수 있습니다.

[email protected]

호스트만 추출하고 싶다고 가정해 보겠습니다. 오히려 사용자 이름을 제거합니다.

hostonly=${host##*@}

만약 내가

echo $hostonly

나는 얻다:

bar.org

내 질문: 명령줄 기록으로 이 작업을 수행할 수 있습니까?

예:

명령 1:

ssh [email protected]

명령 2:

ssh gary@!!:##*@

물론 이것은 작동하지 않습니다. 그러나 누군가 이러한 유형의 패턴 일치가 가능한지 여부를 확인할 수 있습니까?

감사해요!

부브노프

답변1

사람들이 종종 놓치는 깔끔한 요령은 명령입니다 r(이 명령 자체는 명령의 특별한 경우입니다 fc).

$ ssh [email protected]
(...)
$ r foo=baz

보다 일반적인 경우는

$ fc -s foo=bar ssh

이를 통해 하위 문자열로 기록에서 명령을 선택한 다음 지정된 대체를 수행하고 실행할 수 있습니다. 를 그대로 두면 더 복잡한 수정을 위해 -s명령이 에 로드됩니다 . $EDITOR명령줄 편집을 사용하면 대부분 이 작업이 필요하지 않지만 명령줄에서 수행하기 어려운 일부 편집이 있습니다.

히스토리 참조 구문을 사용하여 상당히 복잡한 조작을 수행할 수도 있지만 !역사적 이유로(기본 히스토리 메커니즘은 초기에 확립되었으며 csh모든 개선 사항은 대부분 호환성을 유지했습니다) 다른 구문을 사용합니다. 보다여기자세한 내용은.

답변2

$ ssh [email protected]
...
$ ^foo^gary^
...

"foo" 대신 "gary"를 사용자 이름으로 사용하여 명령이 반복됩니다. 다음은 같은 방식으로 작동합니다.

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

관련 정보