![sed를 사용하여 특정 문자열 뒤의 특정 문자와 다른 n 문자를 바꾸는 방법은 무엇입니까?](https://linux55.com/image/163958/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%92%A4%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%99%80%20%EB%8B%A4%EB%A5%B8%20n%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이전 게시물을 보려고 했지만 답변을 얻지 못했습니다. 미리 감사드립니다! 동일한 패턴을 가진 일부 파일 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)