将文本添加到文件夹中的所有文件

将文本添加到文件夹中的所有文件

我想将文件 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 在他们的答案中显示的内容更好。

相关内容