문자열을 추출하고 bash로 대체

문자열을 추출하고 bash로 대체

다음과 같은 문자열이 있습니다.func showFetchNextSliceFailed(result: UserResult<[Product]>) {

이것으로부터 나는 생각한다 1). 2) 만 추출합니다 showFetchNextSliceFailed. 처럼 주어진 행 바로 위에 삽입하세요 #Mark showFetchNextSliceFailed.

  func showProductsList(result: UserResult<[Product]>) {

  }

  func showFetchNextSliceFailed(result: UserResult<[Product]>) {

  }

예상 출력:

  #Mark showProductsList
  func showProductsList(result: UserResult<[Product]>) {

  }

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {

  }

grep과 sed를 사용해 보았지만 여전히 문자열을 추출하고 교체하는 방법을 올바르게 파악할 수 없습니다.

답변1

그리고sed

  • 일치하는 패턴 공간을 복사하여 공간 절약
  • 패턴 공간 수정
  • 예약된 공간에서 원본 콘텐츠를 복원하고 추가합니다.

전임자.

$ sed '/func show/ {h; s/func \(show[^(]*\).*/#Mark \1/; G;}' file
  #Mark showProductsList
  func showProductsList(result: UserResult<[Product]>) {

  }

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {

  }

답변2

다음 파일이 있는 경우 code:

입력하다:

  $more code
  func showProductsList(result: UserResult<[Product]>) {

  }

  func showFetchNextSliceFailed(result: UserResult<[Product]>) {

  }

주문하다:

perl -i.bak -pe "s/^^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g" code

산출:

  #Mark showProductsList
  func showProductsList(result: UserResult<[Product]>) {

  }

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {

  }

설명하다:

  • -i.bakperl입력 파일 백업을 위한 내부 모드
  • s/^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g패턴 찾기 및 바꾸기 세부정보는 다음 위치에 있습니다.데모

관련 정보