2017-05-05 177 views
0

我已经写了一些代码,检查文件中的所有文件夹和不过正则表达式语句匹配他们,就在该目录的子目录下,我希望它进入并执行的正则表达式,但每当我运行的代码它给我这个错误SED无法打开子目录

sed: couldn't edit TestFolder: not a regular file

我一直在看着SO所有和互联网,并不能找到什么有用的

我试图使用代码我发现为了解决我的问题,但它没有帮助,所以我为可能的可怕代码道歉,它从各种来源拉

`pwd = "$PWD" 
find $pwd = -print | xargs -0 sed -i "/10.0.0.10/d" !(test.sh) 

我的目录结构如下

Test -one.txt -two.txt TestFolder -three.txt

回答

2

随着GNU发现,GNU xargs的,以及GNU sed的:

find . -type f -not -name 'test.sh' -print0 | xargs -0 sed -i '/\<10\.0\.0\.10\>/d' 
+0

原来的解决方案工作得很好,你能解释分离的目的用'\'表达? –

+0

原来没有工作,你只是没有注意到它失败了,也许是因为你没有运行它针对的是会产生故障输入。 '.'是一个正则表达式元字符匹配任何字符,所以'/ 10.0.0.10/D'会删除包含像'10X010Y10'串线。转义'.'s使它们成为文字,因此它们只匹配包含'.'s的预期字符串。您也至少需要单词边界所以'10 \ .0 \ .0 \ .10'不匹配对的'510.0.0.103'或类似的部分。没有看到你的输入文件idk什么其他保护您可能需要的不匹配。 –

+1

这里不需要xargs,'find。型的F - 不是-name 'test.sh' -exec SED -i '/\<10\.0\.0\.10\>/d'{} +'会做,对于任何一种文件名,即使空格,换行,等等... – Sundeep

相关问题