我想从位于特定目录中的所有文件中删除电子邮件 " sudar.dudi@in.xyz.com" 。经过大量搜索,我使用了以下命令。
此命令的问题是,它继续搜索所需目录以外的其他文件,并且由于此命令,我的其他文件已损坏。
请帮我纠正一下:
rrcg0/utioi
(在utioi direcotry中是我的文件,文件具有特定名称 像mpp.properties.JKH,mpp.properties.KJL,mpp.properties.KHF 同样)
yes n|for file in $(find . -type f)
do
sed 's/sudar.dudi@in.xyz.com//g' $file > $file.tmp
mv $file.tmp $file
done
答案 0 :(得分:1)
当您知道目录时,您不需要find
如果要检查ls给出的条目是否为文件,可以使用测试:
mydir=rrcg0/utioi
for file in ${mydir}/*
do
if [ -f "${file}" ]; then
sed 's/sudar.dudi@in.xyz.com//g' $file > $file.tmp && mv $file.tmp $file
fi
done
当您只需要可以使用的专有文件时
for file in ${mydir}/*properties*
我用过&&。这样可以确保只有在重定向成功时才会执行mv命令。
我没有使用sed -i
选项,并不总是支持该选项。
sed 's/sudar.dudi@in.xyz.com//g' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
答案 1 :(得分:0)
使其更简单,尝试使用find和GNU sed选项的exec选项进行内联编辑
find <absolute dir path> -name "*" -type f -exec sed -i '/hello/d' {} \;
答案 2 :(得分:0)
您也可以对现有文件进行更改,因为无需移动文件。在sed命令中包含-i。
修改Walter A的代码
mydir=rrcg0/utioi for file in ${mydir}/* do if [ -f "${file}" ]; then sed -i 's/sudar.dudi@in.xyz.com//g' $file fi done