첫 번째 줄을 file1의 출력으로 바꾸고 file2의 내용을 폴더의 모든 파일에 추가합니다.

첫 번째 줄을 file1의 출력으로 바꾸고 file2의 내용을 폴더의 모든 파일에 추가합니다.

sed를 사용하여 일괄 편집하려는 파일 목록이 있습니다.

  1. 디렉터리에 있는 모든 파일의 첫 번째 줄을 출력으로 바꿉니다.header.txt
  2. 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.txtfooter.txt의 각 파일에 및 내용을 추가합니다 dir.

-i이렇게 하면 원본 파일을 덮어쓰게 된다는 점에 유의하세요 .-s- 비슷한 것으로 변경하여 테스트하거나 -i백업하는 것이 좋습니다 .-i-i.bak

관련 정보