나는 “Suzi와 Marry를 좋아한다”고 “Suzi”를 “Sara”로 바꾸고 싶다.
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
# do something...
결과는 다음과 같아야합니다.
firstString="I love Sara and Marry"
답변
처음 나타나는 패턴을 주어진 문자열로 바꾸려면 다음을 사용하십시오 .${parameter/pattern/string}
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
echo "${firstString/Suzi/$secondString}"
# prints 'I love Sara and Marry'
모든 발생 을 바꾸려면 다음을 사용하십시오 .${parameter//pattern/string}
message='The secret code is 12345'
echo "${message//[0-9]/X}"
# prints 'The secret code is XXXXX'
(이 설명되어 배쉬 참조 설명서 §3.5.3, “쉘 매개 변수 확장을” .)
이 기능은 POSIX (Bash 확장)에 의해 지정되지 않았으므로 모든 Unix 쉘이이를 구현하지는 않습니다. 관련 POSIX 문서 는 Open Group 기술 표준 기본 사양, Issue 7 , Shell & Utilities 볼륨, §2.6.2 “매개 변수 확장”을 참조하십시오 .
답변
이것은 bash 문자열 조작으로 완전히 수행 할 수 있습니다.
first="I love Suzy and Mary"
second="Sara"
first=${first/Suzy/$second}
첫 번째 항목 만 대체합니다. 그것들을 모두 바꾸려면 첫 번째 슬래시를 두 배로하십시오.
first="Suzy, Suzy, Suzy"
second="Sara"
first=${first//Suzy/$second}
# first is now "Sara, Sara, Sara"
답변
대시의 경우 모든 이전 게시물이 작동하지 않습니다
POSIX sh
호환 솔루션은 다음과 같습니다.
result=$(echo "$firstString" | sed "s/Suzi/$secondString/")
답변
이 시도:
sed "s/Suzi/$secondString/g" <<<"$firstString"
답변
sed
문자열에 RegExp 문자 가있는 경우 보다 bash를 사용하는 것이 좋습니다 .
echo ${first_string/Suzi/$second_string}
그것은 Windows에 이식 가능하며 Bash 3.1만큼 오래되었습니다.
이스케이프에 대해 크게 걱정할 필요가 없음을 보여주기 위해
/home/name/foo/bar
이것으로 :
~/foo/bar
그러나 /home/name
처음에있는 경우에만 . 우리는 필요하지 않습니다 sed
!
bash는 마법 변수를 제공 $PWD
하고 다음 $HOME
과 같이 할 수 있습니다.
echo "${PWD/#$HOME/\~}"
편집 : 인용 / 이스케이프에 대한 주석에서 Mark Haferkamp 에게 감사드립니다 ~
. *
변수 $HOME
에 슬래시가 어떻게 포함되어 있는지 확인 하지만 아무것도 깨지 않았습니다.
추가 자료 : Advanced Bash-Scripting Guide .
사용 sed
이 필수 인 경우 모든 문자 를 피 하십시오 .
답변
내일 당신이 결혼을 좋아하지 않기로 결정하면 그녀도 교체 될 수 있습니다.
today=$(</tmp/lovers.txt)
tomorrow="${today//Suzi/Sara}"
echo "${tomorrow//Marry/Jesica}" > /tmp/lovers.txt
연인을 떠나는 방법은 50 가지가 있어야합니다.
답변
댓글을 추가 할 수 없으므로 @ruaka 예제를 더 읽기 쉽게 작성하려면 다음과 같이 작성하십시오
full_string="I love Suzy and Mary"
search_string="Suzy"
replace_string="Sara"
my_string=${full_string/$search_string/$replace_string}
or
my_string=${full_string/Suzy/Sarah}
