我想将文件 disclaimer.txt 中包含的文本添加到文件夹中的所有 .m 文件之前。
我尝试了以下方法:
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
会看到文字 string 1i $text
。
第二个问题是该i
命令需要后面有一个反斜杠,并且该行要添加到第二行,因此您需要执行以下操作:
$ text="blah"
$ sed -i $'1i\\\n'"$text"$'\n' "$file"
(在具有扩展的 shell 中$'...'
,或者在不支持扩展的 shell 中使用文字换行符。)
另外,该i
命令只能添加一行,以下行将被视为附加 sed 命令。
不过如果你有 GNU sed,那么就sed -i "1i $text" "$f"
应该可以工作。但你仍然只能得到一行。
对于多行,可能比 @mjturner 在他们的答案中显示的内容更好。