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
에 대해 작업을 수행하라는 지시를 받습니다 .A
X
-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
하위 디렉토리에도 내려갑니다.