请详细告诉我以下脚本

时间:2015-08-18 06:46:14

标签: linux unix command aix

我想从位于特定目录中的所有文件中删除电子邮件 " 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

3 个答案:

答案 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