Mac에서 sed와 함께 정규식을 사용하면 예상한 결과가 생성되지 않습니다.

Mac에서 sed와 함께 정규식을 사용하면 예상한 결과가 생성되지 않습니다.

내 파일에는 스크립트를 사용하여 조정하려는 다음 줄이 포함되어 있습니다.

module.exports = {
  parserOptions: {
    project: ['./tsconfig.json'],
  },
... more stuff here
}

그래서 이렇게 보입니다. 나는 결과의 공백에 대해별로 신경 쓰지 않습니다.

module.exports = {
  parserOptions: {
    project: ['./tsconfig.json'],
    tsconfigRootDir: __dirname
  },
... more stuff here
}

내가 지금 가지고 있는 것은 다음과 같습니다.

sed -r "s/project:\s*\['.\/tsconfig.json'\],/project:\['.\/tsconfig.json'\],\ntsconfigRootDir\:__dirname/g" filename

그러나 그것은 일치하지 않았습니다. 이 웹사이트에서 일치 패턴을 시도했습니다.https://sed.js.org/index.html?snippet=y7KG95거기에서 내가 원하는 결과를 얻었습니다. 나는 또한 사용해 보았지만 sed -E운이 없었습니다.

스크립트 설정이 잘 작동한다고 말하고 싶습니다. 그렇게 간단한 것을 변경하면 s/project/projectA/g잘 작동하기 때문입니다.

감사해요!

macOS Monterey 12.5.1 사용

답변1

-r모두 GNU-isms인 , \s및 로 \n대체하고 있습니다 ( \s물론 Perl'ism에 더 가깝습니다). 이것도 \:비표준입니다. 그런데 당신이 \눈앞에서 .사라졌어요

표준적으로 구문은 다음과 같습니다.

sed 's@^\([[:blank:]]*\)project:[[:blank:]]*\['\''\./tsconfig\.json'\''\]@&,\
\1tsconfigRootDir: __dirname@g' filename

[[:blank:]]\s(음, \s더 많을 것이지만 여기서는 공백( perl에서) [[:space:]]과 일치하기에 충분해야 함 ) 대신 에 개행 문자를 대체에 포함시키기 위한 개행 문자가 뒤따릅니다.\h\

project추가된 줄을 동일한 들여쓰기로 들여쓰기하기 위해 줄의 선행 공백을 캡처합니다 ( \1캡처 그룹 호출).

구문 확인당신의 sed구현 및 버전 확인그것은다양한 구현이나 버전을 설명할 수 있는 인터넷의 임의 페이지를 포함하거나 대신하는 man문서 입니다 .info

sed이 유틸리티에 대한 POSIX 2018 표준 사양도 참조하세요.거기.

관련 정보