如何用Grep/Awk提取TEST FILE到;的内容并生成独立文件?
解决方案:提取指定片段并保存为独立文件
这里有两种实用的方案,用你偏好的awk/grep工具就能完成需求,完美适配你的FILE A内容:
方案一:纯Awk实现(无需额外工具)
Awk的字符串处理能力刚好能搞定这种分段提取的需求,直接运行以下命令即可:
awk '{ count = 0 # 循环匹配所有符合条件的片段 while (match($0, /TEST FILE[^;]*;/)) { # 提取匹配到的片段 segment = substr($0, RSTART, RLENGTH) # 给片段末尾补个空格(和你期望的输出格式一致) print segment " " > ("File" ++count) # 移除已处理的片段,继续处理剩余内容 $0 = substr($0, RSTART + RLENGTH) } }' FILE_A
说明:
match($0, /TEST FILE[^;]*;/)会精准匹配从TEST FILE开始到第一个;结束的所有内容(包括;)- 每提取一个片段,就写入到对应的
File1/File2...文件中,count变量自动递增生成文件名 - 最后给片段补空格是为了和你给出的期望输出格式完全一致(比如File2的结尾是
;)
方案二:Grep + Bash循环实现(更简洁)
如果喜欢用grep,可以结合bash循环来逐个写入文件:
# 用grep提取所有匹配片段,再循环写入文件 i=1 grep -o 'TEST FILE[^;]*;' FILE_A | while read -r line; do echo "$line " > "File$i" i=$((i+1)) done
说明:
grep -o参数会只输出匹配到的内容,每个片段单独一行- 循环读取每一行匹配结果,依次写入
File1到File5,同样补空格保证格式一致 - 如果你的环境支持Perl正则,可以把grep命令改成
grep -oP 'TEST FILE.*?;' FILE_A,非贪婪匹配会更稳妥(避免意外匹配到多个片段)
两种方案都能完美处理你提供的FILE A内容,生成符合要求的File1到File5文件。
内容的提问来源于stack exchange,提问作者user2008558
相关产品推荐
相关产品推荐

