【问题标题】:fetch a text from string with different length/pattern从具有不同长度/模式的字符串中获取文本
【发布时间】:2019-01-18 05:18:56
【问题描述】:

我想请教如何从 TextN 之前有不同长度/模式的字符串中获取 TextN。剪切、sed 和 awk?任何例子,我很感激。

2018/08/09-20:45:50.671483-06359-06359-433191088669655042-004- TextN
2018/08/09-20:45:50.668677-06359-06359-002-006-  TextN
2018/08/09-20:45:50.668677-063-063-002-006-  TextN

提前谢谢你。

抱歉,** 是部分代码标记。

【问题讨论】:

  • 请编辑您的 Q 以显示您的确切输入文本、相同文本的所需输出、您尽最大努力使用任何错误消息的确切文本来解决问题。你知道sed 's/targStr/replStr/' file(replStr 可以为空,即s/targStr//'。除非你的数据依赖包含* 字符,否则请删除它们,因为它们会使可能需要的正则表达式复杂化)。祝你好运。
  • 如果您只想要行的最后一个字段,请参阅stackoverflow.com/questions/17921544/… .. 您可以使用-F 选项设置自定义字段分隔符,默认为空格,这可能适合您...

标签: awk sed fetch extract cut


【解决方案1】:

如果文本被双星包裹并且在其他地方不存在...

$ awk -F'**' '{print $2}' file

TextN
TextN
TextN

否则发布一个更具代表性的例子。

还有sed

$ sed -E 's/.*\*\*([^*]+)\*\*.*/\1/' file

如果 textN 中没有空格,并且它是用空格分隔的最后一个字段...

$ awk '{print $NF}' file

由于字符、空格具有特殊含义,因此您必须仔细选择示例输入...

【讨论】:

  • 对不起 karakfa。我偶然在TextN周围添加了**。我会探索你的方法。谢谢。
  • 好的。我刚刚在我的日志中意识到,我只需要跳过第一列,然后提取所有文本。像这样。猫日志.txt | awk '{ $1="";打印}'
【解决方案2】:

要完成@karakfa 的awk 示例,使用sed sed -i -E "s/.*\*\*([a-zA-Z]+)\*\*/\1/" <your-text-file>

仅当您的TextN[a-zA-Z] 匹配时,上一个示例才有效。您还可以使用更复杂的东西或添加其他字符。如果您实际上不知道那里会有什么字符: sed -i -E "s/.*\*\*(.+)\*\*/\1/" <your-text-file>

如果您的字符串不在文件中,而是环境变量或只是一个变量: echo $line | sed -E "s/.*\*\*(.+)\*\*/\1/"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多