sed를 사용하여 일괄 편집하려는 파일 목록이 있습니다.
- 디렉터리에 있는 모든 파일의 첫 번째 줄을 출력으로 바꿉니다.
header.txt
footer.txt
모든 파일의 출력을 수정합니다.
폴더에 있는 모든 파일의 현재 XML 헤더를 다음과 같이 바꿔야 한다고 가정해 보겠습니다.
에서:
<?xml version="1.0" encoding="utf-8"?>
도착하다:
<?xml version="1.0" encoding="utf-8"?>
<Container xmlns="http://www.arun-test.com/1.0">
<APIHeader version="2.0" exportTime="Sun Oct 11 09:42:25 EST 2020"></APIHeader>
footer.txt
또한 디렉터리의 모든 파일에 파일 내용의 출력을 추가해야 합니다 .
올바른 단계를 안내해 주세요.
답변1
bash 쉘을 사용하여 모든 파일에서 첫 번째 줄을 제거하고 머리글을 삽입하고 끝에 바닥글을 추가한다고 가정해 보겠습니다.
for f in *.xml; do
tmp=$(mktemp)
(
cat header.txt
tail -n +2 "$f"
cat footer.txt
) > "$tmp" && mv "$tmp" "$f"
done
답변2
sed 명령을 사용하여 r
주소 및 바닥글 파일을 각각 읽고 삽입할 수 있습니다.1
$
GNU sed('linux' 태그 기반)를 가정하고 디렉토리에 최대 명령 길이를 초과할 만큼 파일이 충분하지 않다고 가정합니다.
sed -i -e '1r header.txt' -e '1d' -e '$r footer.txt' dir/*
header.txt
footer.txt
의 각 파일에 및 내용을 추가합니다 dir
.
-i
이렇게 하면 원본 파일을 덮어쓰게 된다는 점에 유의하세요 .-s
- 비슷한 것으로 변경하여 테스트하거나 -i
백업하는 것이 좋습니다 .-i
-i.bak