내 현재 폴더 이름은 다음 과 같은 details1
파일 목록이 포함되어 있습니다.file1
file2
file3
예: (여기서는 이것만 표시했습니다. file1
다른 파일에도 동일한 내용이 포함됩니다 file1
.)
file1:cat file1
href="/de_hecklist/secry/GD/GD10/"
href="/de_hecklist/secry/GT/GT1/"
내 쿼리:
현재 디렉터리(예: file1
, file2
등 file3
)에서 여러 파일을 찾아서 바꾸는 방법을 사용하여 각 파일을 열지 않고 한 번에 각 파일을 바꾸는 방법입니다.
나는 다음을 시도했습니다. (각 파일을 열면 적용됩니다)
:%s/de_hecklist/data/g
:%s/secry/send/g
현재 디렉터리에 여러 파일이 있는 경우 예외 출력은 다음과 같아야 합니다.
href="/data/send/GD/GD10/"
href="/data/send/GT/GT1/"
답변1
이 줄이 올바른 출력을 제공하는 경우
sed -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1
in-place
그러면 내용을 변경할 수 있습니다.-i
sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1
일치하는 모든 파일에 대해 이 작업을 수행하려면 다음을 수행 file?
하십시오.
find . -name 'file?' -type f -exec sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' {} \;
sed
모든 파일을 매개변수로 전달할 수도 있습니다 . 먼저 모든 전체 경로 파일 이름을 제공하는 명령을 만듭니다.
find . -name 'file?' -type f
그런 다음 다음에 추가하십시오 sed
.
sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' $(find . -name 'file?' -type f)
답변2
이 시도:
find -maxdepth 1 -type f -name "file?" -exec sed -i.bak -e 's/de_hecklist/data/g; s/secry/send/g' {} +
-name "file?"
파일과 일치하는 패턴으로 바꾸거나 완전히 제거하여 모든 파일을 편집할 수 있습니다 .
하위 디렉터리가 입력되지 않아 현재 디렉터리에서 일치하는 파일만 변경됨을 나타 -maxdepth 1
냅니다 find
.file?
-i.bak
sed
파일을 백업 할 수 있는 옵션이 있습니다 . 백업이 필요하지 않은 경우 삭제할 수 있습니다. 또한 이 -i
( --in-place
) 옵션은 GNU sed
확장이므로 POSIX와 호환되지 않지만 Linux를 사용하고 있으므로 문제가 되지 않습니다.