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

时间:2017-11-24 04:57:57

标签: linux shell file grep

目录中的不同层次级别的文件包含a.txtb.txtc.txt

a.txt内容

apple  
orange  
mango  

b.txt内容

grape  
apple  
mango  

c.txt内容

orange  
mango  
apple  
grape  

现在应该从所有文件中删除apple,并且需要在相同位置保存使用新名称a_1.txtb_1.txtc_1.txt的文件,同时保持原始文件也一样地方。

因此a_1.txt内容应为

orange  
mango  

b_1.txt内容应为

grape  
mango  

`c_1.txt应该是

orange  
mango  
grape  

2 个答案:

答案 0 :(得分:0)

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" )' {} \;

答案 1 :(得分:0)

希望这些命令对您的脚本有所帮助。

$ sed -i -e 's/apple//g' *.txt

$ for f in *.txt; do printf '%s\n' "${f%.txt}_1.txt"; done