셸 스크립트에서 하위 문자열 하나를 다른 문자열로 바꿉니다.
저는 '수지랑 결혼해'가 있는데 '수지'를 '사라'로 바꾸고 싶어요.
firstString="I love Suzi and Marry"
secondString="Sara"
원하는 결과:
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'
(이는 Bash 레퍼런스 매뉴얼, § 3.5.3 "쉘 파라미터 확장"에 기재되어 있습니다.)
이 기능은 POSIX에 의해 지정되어 있지 않기 때문에(Bash 확장) 모든 Unix 쉘에서 구현되는 것은 아닙니다.관련 POSIX 문서에 대해서는, 「오픈 그룹 테크니컬·스탠다드·베이스·스페시피케이션」, 「제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"
대시의 경우 이전 게시물이 모두 작동하지 않습니다.
POSIXsh호환 솔루션은 다음과 같습니다.
result=$(echo "$firstString" | sed "s/Suzi/$secondString/")
이것은 각 입력 행의 첫 번째 항목을 대체합니다.를 추가합니다./g모든 항목을 바꾸도록 플래그를 지정합니다.
result=$(echo "$firstString" | sed "s/Suzi/$secondString/g")
이것을 시험해 보세요.
sed "s/Suzi/$secondString/g" <<<"$firstString"
Bash를 사용하는 것이 더 좋습니다.sed문자열에 정규 표현 문자가 있는 경우.
echo ${first_string/Suzi/$second_string}
Windows에 이식 가능하며 적어도 Bash 3.1 이전 버전에서도 작동합니다.
탈출에 대해 크게 걱정할 필요가 없다는 것을 보여주기 위해 다음을 수행합니다.
/home/name/foo/bar
이 경우:
~/foo/bar
하지만 만약/home/name시작 단계입니다.필요없다sed!
배쉬가 우리에게 마법 변수를 준다면$PWD그리고.$HOME이하를 실현합니다.
echo "${PWD/#$HOME/\~}"
Mark Haferkamp가 견적/회피에 관한 노트에 코멘트를 써주셔서 감사합니다.~.*
변수가 어떻게$HOME찰과상을 입었지만 아무것도 깨지지는 않았어요
추가 정보:Advanced Bash-Scripting Guide 。
사용하는 경우sed꼭 빼놓을 수 없는 캐릭터입니다.
echo [string] | sed "s|[original]|[target]|g"
- "s"는 "부적합"을 의미합니다.
- "g"는 "전역적으로 일치하는 모든 발생"을 의미합니다.
만약 내일 당신이 메리를 사랑하지 않는다고 결정한다면 그녀도 대신할 수 있습니다.
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}
AWK 사용:
firstString="I love Suzi and Marry"
echo "$firstString" | awk '{gsub("Suzi","Sara"); print}'
Roman Kazanovskyi의 답변과 달리 셸의 네이티브 파라미터 확장만 있으면 되는 순수 POSIX 쉘 방식.긴 파일 이름이 최소화되므로 코드가 한 줄에 더 적합합니다.
f="I love Suzi and Marry"
s=Sara
t=Suzi
[ "${f%$t*}" != "$f" ] && f="${f%$t*}$s${f#*$t}"
echo "$f"
출력:
I love Sara and Marry
구조:
최소 접미사 패턴을 제거합니다.
"${f%$t*}"접미사가 있는 경우 "를 반환합니다.I love$t「」가 들어가 있다.Suzi*$f."I loveSuzi and Marry, 만약 ★★★★★★★★★★★★★★★★.
t=Zelda, , , 「 」"${f%$t*}"는 아무것도 삭제하지 않고 문자열I love Suzi and Marry전체를 반환합니다.하다, 하다, 하다, 하다를 할 때 합니다.
$t에$f[ "${f%$t*}" != "$f" ]이 경우, 이 값은 true로 평가됩니다.$fstring에는Suzi*" 가 포함되어 있고, 포함되지 않으면 false 가 포함되어 있습니다.테스트가 true를 반환하는 경우 최소 접미사 패턴 제거를 사용하여 원하는 문자열을 구성합니다.
${f%$t*}"I love및 최소 프리픽스 패턴 삭제${f#*$t}두 번째 문자열이 있는 " "and Marry$s그 사이에.Sara
첫 번째 오카렌스를 특수 문자로 대체하는 패턴:
${파라미터/패턴/문자열}
모든 오카렌스를 특수 문자로 대체하는 패턴:
${parameter//pattern/string}
firstString="I love //Suzi// and Marry"
secondString="Sara"
firstString="${firstString/\/\/Suzi\/\//"$secondString"}"
echo $firstString
, 하다'라고 쓰여 있습니다.I love Sara and Marry
사용 사례에 가장 깔끔한 폼이라고 생각합니다.
firstString="${firstString//Suzi/$secondString}"
이것을 시험해 보세요.
ls *.ext | awk '{print "mv "$1" "$1".newext"}' | sed "s/.ext.newext/.newext/" | parallel {}
위의 awk 솔루션을 기반으로 awk 변수를 사용하도록 확장합니다.이렇게 하면 특수 문자가 포함된 텍스트를 전달할 수 있습니다.
aString="I love _p1_ very much!"
aVar="complicated \" text \' with \. special ) chars"
awk -v p1="$aVar" '{gsub("_p1_",p1); print}' <<< $aString
생산:
I love complicated " text ' with . special ) chars very much
, 이 경우로 합니다.sed -e ★★★★★★★★★★★★★★★★★」bash★★★★★★ 。
제가 찾은 유일한 방법은 문자열을 파일에 저장하고 sed를 사용하여 파일 내용을 var에 저장하는 것입니다.
echo "I love Suzy" > tmp.txt
sed -i "s/Suzy/Sarah/" tmp.txt
set res=`cat tmp.txt`
echo $res
rm tmp.txt
수 ('), 한 'sh'의 'sh'의 'sh-4'와 은 모두 2밖에 발견되지 않음) 심플한 구문은 모두 실패합니다.test=${test2}: 시 (해야 합니다.2번 사용: (사용할 필요가 있습니다)set) at 、 ) ) 。${}.
「」를 사용합니다.sed 할 수
sed -i "s+$value_to_be_replaced+$with_variable1 "some character" $with_variable2+g" $file_name
언급URL : https://stackoverflow.com/questions/13210880/replace-one-substring-for-another-string-in-shell-script
'programing' 카테고리의 다른 글
| UITableView - 섹션 헤더 색상 변경 (0) | 2023.04.09 |
|---|---|
| Excel VBA에서 변경된 셀의 이전 값을 얻으려면 어떻게 해야 합니까? (0) | 2023.04.09 |
| 배치 스크립트루프 (0) | 2023.04.09 |
| 문자열에 문자가 있는지 테스트합니다. (0) | 2023.04.09 |
| 무료 WPF 컨트롤 및 컨트롤 템플릿은 어디서 구할 수 있습니까? (0) | 2023.04.09 |