변수에서 문자열을 삭제하는 가장 빠른 방법

변수에서 문자열을 삭제하는 가장 빠른 방법

변수가 있다고 가정해 보겠습니다 foo.

foo=`echo ab cd ef gh`

당신이 할 경우 echo foo, 당신은 얻을 것입니다:

$ echo $foo
ab cd ef gh

이제 가장 빠른 방법부터 ef시작 하겠습니다 .$foo

답변1

변수에 변수가 적어도 한 번 포함되어 있다고 가정하면 efPOSIXly:

$ printf '%s\n' "${foo%ef*}${foo##*ef}" 
ab cd  gh

bash, ksh변형(포함되지 않음 posh) zsh및 에서는 yash다음을 사용할 수 있습니다.

$ printf '%s\n' "${foo/ef}"

첫 번째 항목을 삭제 ef하거나 "${foo//ef}"모든 항목을 삭제합니다.

답변2

쉘을 사용할 수 있습니다패턴 교체패턴 삭제:

$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd  gh

노트

  1. 많은 사람들은 백틱을 사용하는 것이 구식이라고 생각합니다. 일반적인 현대적 형태의 명령 대체는 입니다 $(...).

  2. 백틱과 에코를 사용하여 생성하는 foo것은 중복됩니다. 위와 같이 간단히 문자열을 변수에 할당할 수 있습니다.

  3. 무슨 일이 일어나고 있는지에 대한 아이디어를 제공하기 위해 인수를 따옴표로 묶지 않고 echo를 사용하면 쉘이 실행됩니다.분사, 문자열을 세 부분으로 분할하여 echo세 개의 개별 인수로 제공합니다. echo해당 매개변수를 공백으로 연결하십시오.

답변3

여기에는 두 가지 방법이 있습니다.

uc@SVE1411EGXB:~/shop_app/depot2$ foo=`echo ab cd ef gh`
uc@SVE1411EGXB:~/shop_app/depot2$ echo ${foo/ef} 
ab cd gh

또는 스트림 편집기 AKA ..를 사용하여 null로 sed검색 하고 바꿉니다."ef"

uc@SVE1411EGXB:~/shop_app/depot2$ echo $foo | sed 's/ef//g'
    ab cd  gh

관련 정보