sed를 사용하여 특정 문자열 뒤의 특정 문자와 다른 n 문자를 바꾸는 방법은 무엇입니까?

sed를 사용하여 특정 문자열 뒤의 특정 문자와 다른 n 문자를 바꾸는 방법은 무엇입니까?

이전 게시물을 보려고 했지만 답변을 얻지 못했습니다. 미리 감사드립니다! 동일한 패턴을 가진 일부 파일 indisei 라인이 있고 특정 문자열 다음에 다음 [mau] 중 하나를 "A"로 바꾸고 싶습니다. n=22 string="abnt7777/knowthis" charchange "m"

abnt7777/알지만 모른다 CAHRACTERSmRESTOFSTRING

내가 아는 것은 첫 번째 문자열 "abnt7777/knowthis"뿐이고 "abnt7777/knowthis"와 a 사이에 몇 개의 문자가 있는지도 알고 있습니다. 변경 후 문자 수는 22입니다.

abnt7777/knowthis모름CAHRACTERSARESTOFSTRING

답변1

echo "abnt7777/knowthisDONTKNOWWICHCAHRACTERSmRESTOFSTRING" | sed 's#\(abnt7777/knowthis.\{22\}\)m#\1A#'

인쇄

abnt7777/knowthisDONTKNOWWICHCAHRACTERSARESTOFSTRING

sed명령은 abnt7777/knowthis뒤에 22개의 문자를 검색합니다 m. 를 제외한 모든 문자가 m합계에 포함되어 그룹 1로 캡처됩니다 \(. \)일치하는 문자열은 그룹 1( \1) 다음에 로 대체됩니다 A. 줄의 다른 모든 부분은 변경되지 않습니다.

파일 내용 내에서 문자열을 바꾸려면 다음과 같은 것을 사용하십시오.

sed 's#\(abnt7777/knowthis.\{22\}\)m#\1A#' inputfile > outputfile

참고: 실제 입력 모드가 다른 것이라면 abnt7777/knowthis여기에 가 포함되어 있는지 확인해야 합니다 sed.

답변2

변수 확장의 경우 올바르게 이해하면 다음과 같습니다.

foo="abnt7777/knowthisDONTKNOWWICHCAHRACTERSmRESTOFSTRING"
echo ${foo:0:39}A${foo:40}

산출:

abnt7777/knowthis 알 수 없는 문자나머지 문자열
                                      #^ 39 위치(17 abnt7777/knowthis + 22)

관련 정보