在我当前的目录中,我有几个.txt文件。我想编写一个脚本来搜索那些.txt文件中的字符串,并删除包含该字符串的行。 例如,我想删除当前目录中所有.txt文件中包含单词“start”的所有行。
我写了以下代码,但我不知道如何继续!
#!bin\bash
files=`find . -maxdepth 1 -name \*.txt`
我应该如何使用“while”来浏览每个文件?
答案 0 :(得分:3)
容易发痒:
sed -i "s/^.*string.*//" *.txt
这将删除任何包含' string'在每个.txt文件
答案 1 :(得分:3)
在当前目录中使用-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
即可删除您感兴趣的行。