폴더의 모든 .m 파일 앞에 disclaimer.txt 파일에 포함된 텍스트를 추가하고 싶습니다.
나는 다음을 시도했다:
text=$(cat ./disclaimer.txt)
for f in ./*.m
do
sed -i '1i $text' $f
done
하지만 앞에 빈 줄이 추가됩니다.
답변1
이를 수행하는 방법은 여러 가지가 있지만 먼저 시도해 볼 수 있는 간단한 방법은 다음과 같습니다.
#!/bin/sh
for file in *.m; do
cat disclaimer.txt $file >> $file.$$
mv $file.$$ $file
done
고지 사항과 원본 파일을 새 임시 파일로 연결한 다음 원본 파일을 임시 파일의 내용으로 바꿉니다.
답변2
여기에는 두 가지 문제가 있습니다.
sed -i '1i $text' $f
첫째, 변수는 작은따옴표 내에서 확장되지 않으므로 sed
리터럴 문자열이 표시됩니다 1i $text
.
두 번째 문제는 i
명령 뒤에 백슬래시가 와야 하고 해당 줄이 두 번째 줄에 추가되므로 다음을 수행해야 한다는 것입니다.
$ text="blah"
$ sed -i $'1i\\\n'"$text"$'\n' "$file"
(확장이 있는 쉘 $'...'
이나 확장을 지원하지 않는 쉘에서는 리터럴 개행 문자를 사용하십시오.)
또한 이 i
명령은 한 줄만 추가할 수 있으며, 다음 줄은 추가 sed 명령으로 처리됩니다.
하지만 GNU sed가 있다면 sed -i "1i $text" "$f"
작동할 것입니다. 하지만 여전히 행은 하나만 얻습니다.
여러 줄의 경우 @mjturner가 답변에 표시하는 것보다 더 나을 것입니다.