shell 如何在grep后只取一部分?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 如何在grep后只取一部分?相关的知识,希望对你有一定的参考价值。

如图,经过ip -h address | grep inet | head -1代码后输出结果,但是只希望取数字ip地址的部分,请问如何提取

这个好说,可以继续加管道符,然后用cut 命令截取对应的字段,cut命令可以按位置截取,也可以按分隔符截取第几个字段。
例如cut -f ' ' 3
表示以空格为分隔符,取第三个字段
参考技术A

题主你好,

代码及测试截图如下:

希望可以帮到题主, 欢迎追问

本回答被提问者采纳

如何在 shell 脚本中将此正则表达式与 grep 一起使用?

【中文标题】如何在 shell 脚本中将此正则表达式与 grep 一起使用?【英文标题】:How to use this regex with grep in shell script? 【发布时间】:2022-01-14 00:16:01 【问题描述】:

我需要在 shell 脚本中提取公钥,不知道如何使用它。我是 shell 脚本的新手。 https://regex101.com/r/SXDEaU/1

文件内容:

public_key=#STARTKEY#<public key base64 encoded>#ENDKEY#

正则表达式:/public_key=#STARTKEY#(.*)#ENDKEY#/s

由于key是base64编码的,所以是多行字符串。

期望的输出:

【问题讨论】:

请将该示例输入的所需输出(无描述、无图像、无链接)添加到您的问题(无评论)。 grep -Pzo '(?&lt;=public_key=#STARTKEY#)[\s\S]*(?=#ENDKEY#)' file ? 【参考方案1】:
perl -M5.010 -0777ne'say for /public_key=#STARTKEY#(.*?)#ENDKEY#/s' file

密钥是-0777,它将整个文件作为一行读入。

【讨论】:

我会使用([^#]*)而不是(.*),然后从匹配项中删除所有非base64字符(如换行符) @Fravadona,我没有看模式;我只是展示了如何按要求使用它。 [^#]* 不正确,应该是 (?:(?!#ENDKEY#).)*。但是.*? 在这里也可以,而且会比.* 更好。调整答案。 /// 不要求去除非 base64 字符,并不总是可取的,并且在不知道正在使用哪种 base64 风格的情况下无法完成。 哦是的,perl当然有非贪心*【参考方案2】:

使用awk 使用其RS 变量并将其设置为段落模式,请尝试以下代码。

awk -v RS= 'match($0,/public_key=#STARTKEY#.*#ENDKEY#/)print substr($0,RSTART+21,RLENGTH-29)'  Input_file

【讨论】:

不支持空行。但在允许的情况下,一个人极不可能遇到任何问题。所以这可能不是问题。

以上是关于shell 如何在grep后只取一部分?的主要内容,如果未能解决你的问题,请参考以下文章

shell 取下一行

如何在 shell 脚本中将此正则表达式与 grep 一起使用?

使用cron进行调度时如何在shell脚本中grep命令的输出

Shell脚本如何实现对一个文件按关键字行来分成若干个小文件?

linux shell编程 根据端口获取进程pid 直接用命令netstat -anp grep 端口号 在shell中如何获取PID?

如何让js在页面加载后只执行一次,也就是再次刷新当前页,不再执行js