【问题标题】:Cutting Substring from a file从文件中剪切子字符串
【发布时间】:2013-05-20 15:56:58
【问题描述】:

我有一个文件的 2 个 tnsentries 条目,例如 ,每个条目都在一行中。

AAA_PRD = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=mmmm01.dimpotiso.org)(PORT=1521)))(CONNECT_DATA=(SID=ORCL)))

BBB_PRD = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=irkosdap01.nonprod.digrestsiso.org)(PORT=1626))(CONNECT_DATA=(SID=BBBDFS)))^

HOST 条目并不总是以相同的列长度开始。我想从 HOST 中删除条目到主机的末尾括号,或者最好只删除 HOST 条目。

我想得到结果

mmmm01.dimpotiso.org

irkosdap01.nonprod.digrestsiso.org

谢谢

我能够部分地从我的 tnsnames.ora 文件中获取信息 -

cat  tnsnamesMaster_March12_2013.ora | grep 'HOST' | cut -f2 -d 'HOST=' | cut -f2 -d'=' | cut -f1 -d ')'

【问题讨论】:

    标签: shell


    【解决方案1】:
    grep -o 'HOST=[^)]*' tnsnamesMaster_March12_2013.ora | cut -c6-
    

    -o 告诉 grep 只打印匹配的字符串,这将是 HOST= 直到但不包括第一个 )。然后cut那个HOST=出来了。

    如果您的 grep 支持 perl 正则表达式,您可以通过将 HOST= 放在后面来立即完成:

    grep -oP '(?<=HOST=)[^)]+' tnsnamesMaster_March12_2013.ora
    

    显然-o 不是 POSIX,因此上述方法可能不适用于它们。据我所知,以下内容严格符合 POSIX,因此应该可以在任何地方正常工作:

    grep HOST tnsnamesMaster_March12_2013.ora | sed 's/.*HOST=\([^)]*\)).*/\1/'
    
    sed -n '/HOST/s/.*HOST=\([^)]*\)).*/\1/p' tnsnamesMaster_March12_2013.ora
    

    【讨论】:

    • 嗨凯文。感谢回复。我无法在 grep 上使用选项 -o。我改为使用 grep -e 'HOST=[^)]*' tnsnamesMaster_March12_2013.ora 。剪辑似乎给我带来了其他语法问题,我无法得到我想要的东西。我还尝试了 >grep -ep '(?
    • 你在哪个系统上没有-o?如果您在cut (-c 6-) 中添加一个空格,那就是 posix,因此应该适用于任何合理的系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2017-11-29
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多