写一段shell程序,功能是将多个文件中的某段字符串所在行的内容截取出来,并统计个数
时间: 2023-06-02 17:03:00 浏览: 46
#!/bin/bash
# 设置要查找的字符串
search_string="example"
# 定义一个变量来记录匹配到的行数
match_count=0
# 循环处理每个文件
for file in *.txt; do
# 在文件中查找字符串所在的行
matching_lines=$(grep -n "$search_string" "$file" | cut -d ":" -f 1)
# 如果没有匹配到,则跳过该文件
if [[ -z "$matching_lines" ]]; then
continue
fi
# 循环处理每个匹配到的行
for line_number in $matching_lines; do
# 截取该行的内容
line=$(sed -n "${line_number}p" "$file")
# 输出截取到的内容
echo "$file:$line"
# 记录匹配行数
match_count=$((match_count+1))
done
done
# 输出匹配到的行数
echo "Total matching lines: $match_count"
相关问题
请帮我写一个shell 程序,功能是替换文件某些特定行的数字
以下是一个用sed命令实现的shell程序,它将文件file.txt中第3行和第5行的数字替换成"999"。
```shell
#!/bin/bash
file="file.txt"
# 替换第3行数字
sed -i '3s/[0-9]\+$/999/' $file
# 替换第5行数字
sed -i '5s/[0-9]\+$/999/' $file
```
注意:这个程序只能替换数字,如果需要替换其他内容,需要修改正则表达式。另外,sed命令的-i选项表示原地修改文件,所以要小心使用。如果需要备份原始文件,可以使用-i.bak选项。
写一段shell 脚本,取一行文字的第4个字符串
假设你有一个文本文件 `example.txt`,其中有多行文字,每行文字之间以换行符分隔。可以使用以下 Shell 脚本来取每一行文字的第 4 个字符串:
```bash
#!/bin/bash
while read line; do
# 使用 awk 命令取第 4 个字符串并输出
echo $line | awk '{print $4}'
done < example.txt
```
在该脚本中,使用 `while read` 循环逐行读取文本文件 `example.txt` 中的每一行文字,并将其赋值给变量 `line`。然后,使用 awk 命令取变量 `line` 的第 4 个字符串,并使用 `echo` 命令输出。
如果要取的字符串不是空格分隔的,可以使用 `cut` 命令。例如,如果每行文字以逗号分隔,可以使用以下脚本:
```bash
#!/bin/bash
while read line; do
# 使用 cut 命令取第 4 个逗号分隔的字符串并输出
echo $line | cut -d ',' -f 4
done < example.txt
```
在该脚本中,使用 `while read` 循环逐行读取文本文件 `example.txt` 中的每一行文字,并将其赋值给变量 `line`。然后,使用 `cut` 命令取变量 `line` 的第 4 个逗号分隔的字符串,并使用 `echo` 命令输出。`-d ','` 表示指定逗号为分隔符,`-f 4` 表示取第 4 个分隔的字符串。