以下是一个在Linux Shell中使用sed和awk命令的示例脚本,用于打印多次出现的文本1和文本2之间的文本。
#!/bin/bash
# 指定输入/输出分隔符为 NEWLINE
IFS=$'\n'
# 设定文本1和文本2
text1="start"
text2="end"
# 文件名列表(或可使用find命令生成)
files="/path/to/file1 /path/to/file2"
# 循环处理每个文件
for file in $files
do
# 根据 text1 和 text2 的位置分割文本,提取 “中间” 的部分
content=$(sed -n "/$text1/,/$text2/p" "$file" |sed "1d;$d")
# 打印每次出现的文本
for item in "${content[@]}"
do
echo "$item"
done
done
解释: 首先设置了输入/输出分隔符,以防止文件名或文本包含空格等特殊字符。 然后指定了需要查找的文本1和文本2,以及文件名列表。 循环处理每个文件,使用sed命令从每个文件中提取文本1和文本2之间的内容,并剔除多余的行。 最后使用for循环遍历所有出现的文本并打印。
注意:此脚本仅适用于文件较小的情况。对于大文件和大量的文本匹配,建议使用更复杂的解决方案。