【发布时间】:2022-05-08 04:44:49
【问题描述】:
我想保留 (FROM 和 as) 和 (From 和换行符) 之间的字符串。
输入:
FROM some_registry as registry1
FROM another_registry
输出:
some_registry
another_registry
使用以下 sed 命令,我可以提取字符串。有没有办法结合这两个 sed 命令?
sed -e 's/.*FROM \(.*\) as.*/\1/' | sed s/"FROM "//
【问题讨论】:
-
sed 's/.*From \(.*\) as.*/\1/;s/From //' file?见ideone.com/cjvvaB。在这里合并成一个正则表达式很困难,因为 POSIX 正则表达式不支持惰性量词。 -
这是因为您的正则表达式与您在问题中发布的字符串不匹配(请参阅
From和FROM和"FROM ")。 -
好吧,也许
grep -oP 'FROM\s+\K.*?(?=\s+as\b|$)' file是更好的选择?当然,如果你有 GNUgrep。 -
从重复链接中,查看答案stackoverflow.com/a/25386918/5866580,当我根据显示的示例运行它时,例如:
grep -oP 'FROM\s*\K(?:(?!\s+as).)*' file它给了我所需的输出。