gpt4 book ai didi

linux - 如何 grep 字符串并显示 Linux 文件中的前一个单词

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:59 25 4
gpt4 key购买 nike

我有一个包含很多 IP 的文件,每个 IP 都有一个 ID,如下所示:

"id":340,"ip":"10.38.6.25"
"id":341,"ip":"10.38.6.26"
"id":345,"ip":"10.38.6.27"
"id":346,"ip":"110.38.6.27"

在这个 Ips 之下和这些 Ips 之后,文件有更多信息,它是 API 调用的输出..

我需要,grep 一个 IP,然后命令显示 id,只是数字。像这样:

345

编辑:更多信息,ip 每次都会不同,我需要通过参数传递 IP。我无法将 IP 解析为语法 X/X/X/X...

有什么想法吗?

最佳答案

由于您当前的要求是从损坏的 json 文件中获取 ID,因此请重新格式化我之前的回答。

尽管我推荐使用此解决方案来获取ID,但一个比较笨拙的方法是在 PCRE 模式下使用 grep .我完成逻辑的方式是获取 IP 字符串并获取它之前的字符。我不确定如何单独从 id 中提取返回我的数字

317,"ip":"10.38.6.2"

因此使用process-substitution 获取第一个, 之前的值,如下所示。

IFS="," read -r id _< <(grep -Po ".{0,4}\"ip\":\"10.38.6.2\"" file); printf "%s\n" "$id"
317

IFS="," read -r id _< <(grep -Po ".{0,4}\"ip\":\"10.38.6.3\"" file); printf "%s\n" "$id"
318

只需添加您需要的 IP 作为 grep 字符串的一部分。

以下逻辑仅适用于您的初始输入。

awk 中使用多字符定界符 ;,,我们可以这样做:-

awk -F'[:,]' '/10\.38\.6\.27/{print $2}' file
345

更好的方法是使用等同于 awk // 正则表达式功能的 match 语法来使用您选择的变量。按照以下格式提供您想要的输入 IP。

input='"10\\.38\\.6\\.25"'
awk -F'[:,]' -v var="$input" '{ if ( match( $0, var )) {print $2};}' file
340

避免匹配不正确行的更可靠方法是使用 " 也作为分隔符,并按照 hek2mgl 的建议与 IP 直接匹配。

awk -F'[:,"]' -v var="$input" '$9==var{print $4}' file
340

关于linux - 如何 grep 字符串并显示 Linux 文件中的前一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40801445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com