如何用awk提取文本?匹配import后打印至行首为}时停止
文本提取:从"import "开始打印到行首"}"停止
修正后的awk命令
awk '/^}/ {f=0} /import / {f=1} f' input
适配带前置空格的import语句(更通用)
如果需要匹配行首带空白字符的import(比如缩进后的import语句),可以用:
awk '/^}/ {f=0} /^\s*import / {f=1} f' input
原命令的问题分析
- 匹配范围过窄:原命令仅匹配
import org或前置空格的import org,无法覆盖其他开头的import语句(比如import java.util.*;),不符合"找到字符串'import '就开始"的需求。 - 逻辑冗余:原命令的条件判断写得过于复杂,且没必要限制import的后续内容。
命令逻辑拆解
/^}/ {f=0}:遇到行首为}的行时,将打印标志f设为0,停止后续打印。/import / {f=1}:遇到包含import(注意末尾有空格)的行时,将打印标志f设为1,开始打印。f:awk的简写语法,等价于if(f) print $0,当f为真时打印当前行。
示例验证
输入示例:
public class Demo { init code import org.test.Utils; import java.util.Map; process line } post content
输出示例:
import org.test.Utils; import java.util.Map; process line
内容的提问来源于stack exchange,提问作者albertkao9
相关产品推荐
相关产品推荐

