【发布时间】:2011-08-13 09:19:04
【问题描述】:
我希望能够在文件夹中每个文本文件的开头添加一个字符串。如何在 Linux 上使用 bash 做到这一点?
【问题讨论】:
我希望能够在文件夹中每个文本文件的开头添加一个字符串。如何在 Linux 上使用 bash 做到这一点?
【问题讨论】:
这样就可以了。如果您对每个文件执行相同的文本,则可以提高效率...
for f in *; do
echo "whatever" > tmpfile
cat $f >> tmpfile
mv tmpfile $f
done
【讨论】:
$f 都应该是 "$f"。做一些错误检查也很好。此外,它还会更改原始文件的权限和所有权。
这应该可以解决问题。
FOLDER='path/to/your/folder'
TEXT='Text to prepend'
cd $FOLDER
for i in `ls -1 $FOLDER`; do
CONTENTS=`cat $i`
echo $TEXT > $i # use echo -n if you want the append to be on the same line
echo $CONTENTS >> $i
done
如果您的文件很大,我不建议这样做。
【讨论】:
ls 示例的无用用法。使用 shell 扩展。
你也可以这样做:
for f in *; do
cat <(echo "someline") $f > tempfile
mv tempfile $f
done
它与第 1 篇文章没有太大区别,但确实展示了如何将 'echo' 语句的输出视为文件,而无需创建临时文件来存储值。
【讨论】:
您也可以在 1 个单一命令 中使用 sed 来完成此操作
for f in *; do
sed -i.bak '1i\
foo-bar
' ${f}
done
【讨论】:
你可以这样做没有循环和cat
sed -i '1i whatever' *
如果要备份文件,请使用 -i.bak
或使用awk
awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' *
【讨论】:
如果您愿意,可以使用 ed 命令来处理临时文件:
for file in *; do
(test ! -f "${file}" || test ! -w "${file}") && continue # sort out non-files and non-writable files
if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi # sort out binary files
printf '\n%s\n\n' "FILE: ${file}"
# cf. http://wiki.bash-hackers.org/howto/edit-ed
printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}" # dry run (just prints to stdout)
#printf '%s\n' H 0a "foobar" . wq | ed -s "${file}" # in-place file edit without any backup
done | less
【讨论】:
这是我最简单的方法。
sed -i '1s/^/Text 添加然后新的file\n/' /file/to/change
【讨论】:
单行:rename '' string_ *
【讨论】:
这是一个例子:
for f in *;
do
mv "$f" "whatever_$f"
done
【讨论】: