linux - Bash-在空文件和非空文件的开头查找文件并插入文本?
问题描述
我对 bash 命令很陌生。有人可以帮我解决这个问题吗?
我必须在当前目录中找到所有 .txt 文件,并在这些文件的开头添加一个文本。我在下面写了命令-
find . -name *.txt | xargs sed -i '1iadd text here'
此命令适用于所有非空文件。但它不适用于那些为空的文件。我发现这是因为 sed 命令无法在空文件中找到第一行,因此该命令未执行。还有其他方法可以为空文件添加文本吗?
解决方案
很难改进短单行。有时最好准备一段典型的、自我解释的代码,不太紧凑,有一些假设(这里:临时文件),但在 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
,xargs
和sed
, 并且sed
不能正常处理空文件,您可以在文件中附加一个空行,插入文本,然后删除附加的行:
find . -type f -name '*.txt' | xargs -I "%" sh -c 'echo "" >> "%"; sed -i -e "1iadd text here" -e "$ d" "%"'
推荐阅读
- excel - 谷歌表格较短的单元格范围“IF”语句?
- docker - docker-compose中nginx多台主机之间的通信
- linux - 在 Mongo 命令行中搜索和替换
- react-native - 在子组件中反应 this.props.navigation.openDrawer()?
- iphone - 快速重叠多个视频
- xml - xml 模式类型未声明或缺失
- android - 在 Android TV 5.1.1 上的 /system/priv-app 中安装时遇到困难
- email - 电子邮件未发送且没有错误 [SAS]
- python - 使用更新的元数据标签创建一个 geotiff 文件,而不使用 aux.xml 文件
- javascript - 如何在rails项目中验证文件类型