想要搜索字符串并需要字符串的一部分
文件.txt:
CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKADSRATIO
使用下面的命令时sed
获得额外的价值
输出:
bash-4.3$ sed -n 's/.*$$ENV$$_//p' file.txt
**TEMP_ESM.EMPASGMTAMPTMPRTRSE** ,NO FALLBACK ,
我只需要TEMP_ESM.EMPASGMTAMPTMPRTRSE
答案1
sed -n 's/.*$$ENV$$_//p' example.txt
命令在所有行中s/pattern/replacement/
搜索sed
正则表达式的出现pattern
并替换它。使用空替换后,模式将被删除,这似乎就是您想要的。
尾随p
输出修改后的行,而所有默认输出都被该-n
选项抑制。
答案2
使用 GNU grep
(最近的)PCRE 支持构建时(这在 GNU 和 BSD 系统上很常见):
grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file
将提取除每次出现 后的空格和逗号之外的所有字符序列$$ENV$$_
。
如果 GNUgrep
不可用,可以使用perl
(P
PCRE 中的)执行相同的操作:
perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file
或者如果perl
版本太旧而无法支持\K
:
perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file
答案3
sed
方法:
sed -n 's/^CREATE.*$_\([^[:space:],]*\).*/\1/p' file
\([^[:space:],]*\)
- 第一个捕获的组包含除空格[:space:]
和逗号之外的字符,
输出:
TEMP_ESM.EMPASGMTAMPTMPRTRSE
答案4
sed '/.*$$ENV$$_/!d;s///;s/,.*//'
/.*$$ENV$$_/!d
:如果该行不包含$$ENV$$_
,则不输出,不进行进一步处理s///
:删除匹配的模式s/,.*//
: 删除逗号和后面的所有内容