SED MAC을 사용하여 모든 파일에서 특수 문자가 포함된 줄을 반복적으로 교체합니다.

SED MAC을 사용하여 모든 파일에서 특수 문자가 포함된 줄을 반복적으로 교체합니다.

SED다음을 사용하여 한 줄을 다른 줄로 바꾸려고 했습니다. MAC OS X Terminal 디렉터리에 있는 모든 파일의 한 줄을 다른 줄로 바꿔야 하는 시나리오가 있습니다. 두 줄 모두 복잡하고 특수 문자와 기호가 다릅니다.

어떻게 교체할 수 있나요?

교체해야 해요

import { wait } from 'path/and-child-path'

~와 함께

import { wait } from 'path/path/and-child-path'

내가 시도한 것은

find . -type f | xargs sed -i '' "s@import { wait } from 'path/and-child-path'@import { wait } from 'path/and-child-path'@g"

이것은 작동하지 않습니다. 저를 도와주세요.

답변1

귀하 sed가 제공한 에는 일치 및 바꾸기 패턴이 동일하므로(오타가 아닌 경우) 파일이 변경될 것으로 예상할 수 없습니다. 게다가 ''비트가 있어서는 안됩니다.

그 점을 바로잡으면~일 것이다와 끝까지

find . -type f | xargs sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g"

그럼에도 불구하고 해당 코드는 실패합니다일반적인 경우 파일 이름에는 공백(심지어 개행 문자도!) 문자가 포함될 수 있기 때문에 이것이 바로 xargs구분 기호로 사용됩니다. 따라서 파일이 있는 경우 A X파일 및 sed에 대해 작업을 수행하라는 지시를 받습니다 .AX

-exec옵션은 문제를 간단하게 해결합니다.

find . -maxdepth 1 -type f -exec sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g" {} +

또한 추가했습니다 -maxdepth 1. 그렇지 않으면 find하위 디렉토리에도 내려갑니다.

관련 정보