批量查找目录下所有的run.log文件中的关键词‘T=’,并输出每个run.log文件最后一个匹配的关键词所在的行
时间: 2024-09-13 07:06:15 浏览: 31
在Linux或Mac环境中,你可以使用`grep`命令结合`tail`来查找目录下所有`run.log`文件中的关键词`T=`,然后输出每个文件中最后一次出现该关键词的行。首先,你需要创建一个文本文件(比如`search_files.sh`)包含你要搜索的目录路径,例如:
```sh
#!/bin/bash
# 指定要搜索的目录
dir_to_search="/path/to/directory"
# 使用find命令列出所有run.log文件
for file in $(find $dir_to_search -type f -name run.log); do
# 使用grep在每个文件中查找"T="
last_match=$(grep -n 'T=' $file | tail -n 1)
# 如果找到了匹配,打印文件名和最后一行
if [ -z "$last_match" ]; then
echo "$file: No match found."
else
echo "$file: Last match at line $(echo $last_match | cut -f2)"
fi
done
```
把这个脚本保存并赋予执行权限后,运行它即可查看结果。
注意:确保替换`/path/to/directory`为实际的目录路径。
相关问题
编写一个shell脚本,接受一个目录作为参数,递归遍历该目录下的所有文件以及子文件夹,统计输出.log文件与.txt文件数量、及相关文件路径
Sure! Here's a shell script that accepts a directory as a parameter, recursively traverses all files and subdirectories within that directory, and outputs the count of `.log` and `.txt` files along with their respective file paths:
```bash
#!/bin/bash
# Function to recursively traverse directory
traverse_directory() {
local dir=$1
# Loop through each file and subdirectory in the given directory
for file in "$dir"/*; do
if [ -f "$file" ]; then
# Check if the file has .log or .txt extension
if [[ $file == *.log ]]; then
echo "Log file found: $file"
((log_count++))
elif [[ $file == *.txt ]]; then
echo "Text file found: $file"
((txt_count++))
fi
elif [ -d "$file" ]; then
# Recursively call the function for subdirectories
traverse_directory "$file"
fi
done
}
# Check if directory is provided as argument
if [ $# -eq 0 ]; then
echo "Please provide a directory as an argument."
exit 1
fi
# Initialize file count variables
log_count=0
txt_count=0
# Call the function to traverse the directory
traverse_directory "$1"
# Output the file counts
echo "Number of log files: $log_count"
echo "Number of text files: $txt_count"
```
To use this script, save it to a file (e.g., `file_count.sh`), make it executable using `chmod +x file_count.sh`, and then run it with the desired directory as the argument:
```bash
./file_count.sh /path/to/directory
```
Replace `/path/to/directory` with the actual directory path you want to traverse. The script will recursively search for `.log` and `.txt` files and print their counts along with the file paths.
makefile中../simv +UVM_TESRNAME=$(TC) $(SIM_OPT) | tee run.log 是什么意思
这个makefile命令的含义是运行一个名为simv的可执行文件,并传递两个参数:+UVM_TESTNAME=$(TC)和$(SIM_OPT),同时将输出信息输出到文件run.log中。
具体来说,../simv表示要运行的可执行文件的路径。+UVM_TESTNAME=$(TC)表示传递一个参数+UVM_TESTNAME,它的值是makefile变量$(TC)的值。$(SIM_OPT)表示传递另一个参数$(SIM_OPT)的值。
“|”是管道符号,它表示将命令的输出传递给另一个命令。在这个命令中,tee命令用于将标准输出复制一份输出到文件run.log中,这样既可以在终端上看到输出信息,又可以将输出日志保存到文件中。
因此,这个命令的含义是:运行可执行文件simv,并传递两个参数+UVM_TESTNAME=$(TC)和$(SIM_OPT),同时将输出信息输出到文件run.log中。
希望这个解释能够帮助你理解makefile规则中的命令。