다음과 같은 더미 프로젝트가 있다고 가정합니다.
$tree -L 3 ~/my-proj
./dir/foo.sh
./bar.sh
모든 *.sh 파일에 저작권 파일 헤더를 삽입하고 싶습니다. 예를 들어 내 헤더는 다음과 같습니다.
/*
* Copyright (c) 2015 by MyCompany, Inc.
* All rights reserved.
*/
여러 줄로 인해 어려움을 겪고 있습니다. 아래에 스크립트를 작성했지만 여러 줄에서는 작동하지 않습니다.
#!/bin/sh
HEADER=$(cat<<EOH
/*
* Copyright (c) 2015 by MyCompany, Inc.
* All rights reserved.
*/
)
find ~/my-proj/*.sh -exec sed -i "1s/^/$HEADER\n/" {} \;
답변1
이것을 사용하십시오:
header='/*\n * Copyright (c) 2015 by MyCompany, Inc.\n * All rights reserved.\n */\n'
find ~/my-proj/*.sh -exec sed -i "1s|^|$header|" {} \;
노트:
쉘은 값을
$header
sed 명령으로 직접 대체합니다. 이를 통해 sed 스크립트에 임의의 명령을 삽입할 수 있습니다. 하다~ 아니다.header
헤더에
/
문자가 포함되어 있습니다. 해당 문자를 이스케이프해야 하거나 대체 명령이 다른 구분 기호를 사용해야 합니다. 위에서는|
구분 기호로 사용되었습니다.쉘 변수에는 소문자 또는 대소문자 혼합을 사용하는 것이 가장 좋습니다. 시스템은 변수에 대문자를 사용하며 이 경우에는 문제가 되지 않지만 실수로 덮어쓰는 것을 원하지 않습니다.
예
수정된 sed 명령을 설명하려면 다음 테스트 파일을 고려하세요.
$ cat file
1
2
3
sed 명령은 다음을 생성합니다.
$ sed "1s|^|$header|" file
/*
* Copyright (c) 2015 by MyCompany, Inc.
* All rights reserved.
*/
1
2
3