2

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

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

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

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

4

3 回答 3

3

Easy cheasy: sed -i "s/^.*string.*//" *.txt 这将删除每个 .txt 文件中包含“字符串”的任何行

于 2012-07-21T20:20:09.750 回答
3

使用 Glob 填充循环变量

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

#!/bin/bash

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

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

于 2012-07-21T21:48:58.347 回答
1

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

于 2012-07-21T20:16:42.140 回答