获取 AIX 中特定单词的值部分

获取 AIX 中特定单词的值部分

想要搜索字符串并需要字符串的一部分

文件.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不可用,可以使用perlPPCRE 中的)执行相同的操作:

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/,.*//: 删除逗号和后面的所有内容

相关内容