如何使用循环从.text文件中删除行?

时间:2012-07-21 20:13:04

标签: file bash loops edit

在我当前的目录中,我有几个.txt文件。我想编写一个脚本来搜索那些.txt文件中的字符串,并删除包含该字符串的行。 例如,我想删除当前目录中所有.txt文件中包含单词“start”的所有行。

我写了以下代码,但我不知道如何继续!

#!bin\bash
files=`find . -maxdepth 1 -name \*.txt`

我应该如何使用“while”来浏览每个文件?

3 个答案:

答案 0 :(得分:3)

容易发痒: sed -i "s/^.*string.*//" *.txt 这将删除任何包含' string'在每个.txt文件

答案 1 :(得分:3)

使用Globs填充循环变量

在当前目录中使用-maxdepth 1时,不会递归到子目录中。如果是这种情况,则根本不需要使用 find 来匹配带扩展名的文件;您可以使用shell globs来填充循环结构。例如:

#!/bin/bash

# Run sed on each file to delete the line.
for file in *txt; do
    sed -i '/text to match/d' "$file"
done

这很简单,并且避免了在进程之间传递filename参数时可能遇到的许多与文件名相关的问题。保持简单!

答案 2 :(得分:1)

在将find的结果汇总到它之后,您可以使用它along with read依次获取每个文件名。然后,您只需将文件名传递给sed即可删除您感兴趣的行。

相关问题