linux - 如何递归地查看目录中的文件,删除特定模式并将其写入同一层次结构中的新文件名

标签 linux shell file grep

目录中存在不同层级的文件,例如a.txtb.txtc.txt

a.txt内容为

apple  
orange  
mango  

b.txt内容为

grape  
apple  
mango  

c.txt内容为

orange  
mango  
apple  
grape  

现在苹果应该从所有文件中删除,并且需要使用新名称 a_1.txtb_1.txtc_1.txt 将文件保存在相同位置,同时将原始文件也保存在相同位置。

因此a_1.txt内容应该是

orange  
mango  

b_1.txt内容应为

grape  
mango  

`c_1.txt 应该是

orange  
mango  
grape  

最佳答案

find + shell 解决方案(结合 grep + sed + prename(Perl rename) 工具):

find . -type f -name "*.txt" -exec sh -c \
'grep -q "\<apple" "$0" && (sed -i "/\<apple/d" "$0"; prename "s/\.txt$/_1$&/" "$0" )' {} \;

关于linux - 如何递归地查看目录中的文件,删除特定模式并将其写入同一层次结构中的新文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466604/

相关文章:

c - execvp 和读取命令参数

java - 在java中将字符串转换为 key

android - 如何列出设备上的所有图像?

c++ - 读取/proc/pid/status的正确方式

Linux - 按添加日期执行目录中的所有 Bash 脚本

php - 如果我在一个 sh 文件中有 2 个 php 脚本,我可以确定第二个脚本只会在第一个脚本完成后才开始运行吗?

macos - 在 MacOS 终端中获取当月的第一天

具有不完整列的 Linux 文件排序

linux - 如何在 Perl 中监控远程 Linux 机器并检索已安装的软件?

linux - 如何在 Linux 上从防火墙后面安装 Brackets IDE?