예: 나는 string1 = 'abcd'
, 및 을 가지고 있습니다 string2 = 'xwyz'
.
string1의 세 번째 문자("c")를 string2의 네 번째 문자("z")로 바꾸고 싶습니다.
물론 문자열 인덱싱은 0부터 시작됩니다.
어떻게 해야 하나요?
답변1
그리고세게 때리다하위 문자열 작업:
s1="abcd"
s2="xwyz"
s1=${s1:0:2}${s2:3}${s1:3}
${s1:0:2}
- 첫 번째 조각에는 다음이 포함됩니다ab
(세 번째 문자까지c
).${s2:3}
s2
- 삽입할 문자열의 4번째 문자${s1:3}
s1
- 문자열의 마지막(4번째) 문자
최종 s1
값:
echo $s1
abzd
아니면 GNU를 사용하세요앗도구:
gawk -v s2=$s2 -v FPAT='[a-z]' '{$3=substr(s2,4)}1' OFS="" <<< $s1
abzd
<<< $s1
- 첫 번째 문자열이s1
입력으로 간주됩니다.-v s2=$s2
- 두 번째 문자열을s2
변수로 전달합니다.앗스크립트FPAT='[a-z]'
- 필드 값을 정의하는 정규식 패턴([a-z]
- 임의의 알파벳 문자)
또는 "빈" 필드 구분 기호를 적용하여 FS=""
각 문자를 별도의 필드로 처리할 수 있습니다.
gawk -v s2=$s2 'BEGIN{ FS=OFS="" }{$3=substr(s2,4)}1' <<< $s1
abzd
답변2
다음은 awk 코드입니다(길고 복잡하지만 저에게는 작동합니다).
echo |awk -v a="$string1" -v b="$string2" '{split(a,a1,""); n=split(b,b1,"");a1[2]=b1[3];for (i=1;i<=n;i++) {printf a1[i]}}'