我希望从给定目录中的所有文件中删除整行文本。我知道我可以使用grep -v foo filename一次完成一个文件。我知道我可以使用grep -r foo递归地搜索一个目录。如何结合这些命令从目录中的所有文件中删除给定的文本行?
发布于 2015-08-11 01:43:04
我认为这是可行的:
grep -ilre 'Foo' . | xargs sed -i 'extension' 'Foo/d'
其中'extension'引用对文件名的添加。它将复制原来的文件与您指定的扩展名和修改后的文件将有原始文件名。我添加了-i,以防您要求它不区分大小写。
修改后的file1变成" file1“原始file1变为"file1extension”
invalid command code ., despite escaping periods, using sed
其中一个响应表明,OSX中sed的-i选项的更新版本略有不同,因此您需要添加一个扩展名。该文件被解释为命令,这就是为什么您会看到这个错误。
发布于 2015-08-10 21:23:57
试一试如下:
grep -vlre 'foo' . | xargs sed -i 's/pattern/replacement/g'分解:
grep:
-v 'Inverse match'
-l 'Show filename'
-r 'Search recursively'
-e 'Extended pattern search'
xargs: For each entry perform
sed -i: replace inline 发布于 2015-08-10 21:57:00
查找文件的UNIX命令名为find,而不是grep。忘记您曾经听说过grep -r只是个坏主意,下面是查找文件并对它们执行一些操作的正确方法:
find . -type f -print | xargs sed -i '/badline/d'https://stackoverflow.com/questions/31927696
复制相似问题