한 문자열의 특정 문자를 다른 문자열의 특정 문자로 바꾸는 방법은 무엇입니까?

한 문자열의 특정 문자를 다른 문자열의 특정 문자로 바꾸는 방법은 무엇입니까?

예: 나는 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]}}'

관련 정보