首页 > 解决方案 > Bash-在空文件和非空文件的开头查找文件并插入文本?

问题描述

我对 bash 命令很陌生。有人可以帮我解决这个问题吗?

我必须在当前目录中找到所有 .txt 文件,并在这些文件的开头添加一个文本。我在下面写了命令-

find . -name *.txt | xargs sed -i '1iadd text here'

此命令适用于所有非空文件。但它不适用于那些为空的文件。我发现这是因为 sed 命令无法在空文件中找到第一行,因此该命令未执行。还有其他方法可以为空文件添加文本吗?

标签: linuxbashunixxargs

解决方案


很难改进短单行。有时最好准备一段典型的、自我解释的代码,不太紧凑,有一些假设(这里:临时文件),但在 100% 的情况下工作,例如:

for file in `ls *.txt`; do awk 'BEGIN {print "add text here"}{print$0}' $file > tmp.tmp | mv tmp.tmp $file; done

或者更确切地说(编辑):

for file in ./*.txt; do awk 'BEGIN {print "add text here"}{print$0}' "$file" > tmp.tmp | mv tmp.tmp "$file"; done

然后尝试混合解决方案。

编辑:

如果您必须使用find,xargssed, 并且sed不能正常处理空文件,您可以在文件中附加一个空行,插入文本,然后删除附加的行:

find . -type f -name '*.txt' | xargs -I "%" sh -c 'echo "" >> "%"; sed -i -e "1iadd text here" -e "$ d" "%"'

推荐阅读