^ x ^ y 마지막 명령의 모든 인스턴스에 대한 유닉스 트릭?


97

내가 가장 좋아하는 유닉스 트릭 중 하나는 ^x^y입니다.이 명령은 마지막 명령을 수행하고 "x"의 첫 번째 인스턴스를 "y"로 바꿉니다. 그러나 마지막 명령에서 "x"의 모든 인스턴스를 "y" 로 바꾸는 비슷한 트릭이 작동하는지 궁금합니다 .


2
이 기능을 히스토리 확장이라고합니다. command-history태그를 사용하는 것 같습니다 . 추가되었습니다. 또한 bash쉘을 언급한다고 가정 합니까?
Mikel

답변:


107

!!:gs/search/replace/표기법을 사용하여 원하는 것을 수행 할 수 있습니다. 전역 검색 및 바꾸기 ( :gs)를 사용합니다.

전에

$ echo "harm warm swarm barm"
harm warm swarm barm

$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born

참고 문헌


1
@slm이 명령은 첫 번째 인스턴스 만 대체합니다. [subhrcho@slc04lyo pcbpel]$ echo "hat that bat" hat that bat [subhrcho@slc04lyo pcbpel]$ !!:gs/at/xx/ echo "hxx that bat" hxx that bat. 내가 무엇을 놓치고 있습니까?
Geek

@ 괴짜-당신의 배포판은 무엇입니까? Bash를 사용하고 있습니까? 번역? bash --version= 4.2.45 (1) 릴리스.
slm

@slm GNU bash, 버전 3.2.25 (1)-릴리스 (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.
Geek

@Geek-너무 오래된 버전이므로이 기능을 제공하지 않습니다.
slm

45

모든 경우를 대체 ^string1^string2하기 위해 무언가를 추가하는 쉬운 방법이 없다고 생각 bash합니다. slm이 지적했듯이을 작성해야합니다 !!:gs/string1/string1.

그러나에 zsh다음을 추가 할 수 있습니다 :G.

$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar

와에서 모두 다음 bash과 같이 zsh사용할 수 있습니다 fc -s.

$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar

이것은 종종 별명으로 만들어 r지므로 다음과 같이 할 수 있습니다.

$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar

와우, 이것도 정말 깔끔합니다
Mason

2

최선의 선택은 ": &"를 사용하는 것입니다

$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat

3
그것은 번의 발생을 모두 대신 하지는 않습니다 (이 예제에서는 두 번만 발생하지만 일반적인 경우는 아닙니다). :&교체 할 횟수가 더 많을수록 추가해야합니다 .
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.