需要抓取波浪号字符之间的数据

发布于 2024-12-03 20:21:07 字数 140 浏览 1 评论 0原文

任何人都可以建议如何在 linux 上搜索波浪号字符之间的一些数据。我需要获取 IP 数据,但其形成如下。

Details:
20110906000418~118.221.246.17~DATA~DATA~DATA

Can any one advise how to search on linux for some data between a tilde character. I need to get IP data however its been formed like the below.

Details:
20110906000418~118.221.246.17~DATA~DATA~DATA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

娇柔作态 2024-12-10 20:21:07

再来一张:

echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | sed -r 's/[^~]*~([^~]+)~.*/\1/'

One more:

echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | sed -r 's/[^~]*~([^~]+)~.*/\1/'
物价感观 2024-12-10 20:21:07
echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d'~' -f2

这使用 cut 命令,并将分隔符设置为 ~。然后,-f2 开关仅输出第二个字段。

如果您提供的文本位于文件中(名为 filename),请尝试:

grep "[0-9]*~" filename | cut -d'~' -f2
echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d'~' -f2

This uses the cut command with the delimiter set to ~. The -f2 switch then outputs just the 2nd field.

If the text you give is in a file (called filename), try:

grep "[0-9]*~" filename | cut -d'~' -f2
拥抱我好吗 2024-12-10 20:21:07

使用剪切

 echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d~ -f2

使用awk

 echo "20110906000418~118.221.246.17~DATA~DATA~DATA" 
       | awk -F~ '{ print $2 }'

With cut:

 echo "20110906000418~118.221.246.17~DATA~DATA~DATA" | cut -d~ -f2

With awk:

 echo "20110906000418~118.221.246.17~DATA~DATA~DATA" 
       | awk -F~ '{ print $2 }'
青春有你 2024-12-10 20:21:07

在 awk 中:

echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | awk -F~ '{print $2}'

In awk:

echo '20110906000418~118.221.246.17~DATA~DATA~DATA' | awk -F~ '{print $2}'
蓝海似她心 2024-12-10 20:21:07

只需使用bash

$ string="20110906000418~118.221.246.17~DATA~DATA~DATA"
$ echo ${string#*~}
118.221.246.17~DATA~DATA~DATA
$ string=${string#*~}
$ echo ${string%%~*}
118.221.246.17

Just use bash

$ string="20110906000418~118.221.246.17~DATA~DATA~DATA"
$ echo ${string#*~}
118.221.246.17~DATA~DATA~DATA
$ string=${string#*~}
$ echo ${string%%~*}
118.221.246.17
第几種人 2024-12-10 20:21:07

另一种,使用 perl:

$ perl -F~ -lane 'print $F[1]' <<< '20110906000418~118.221.246.17~DATA~DATA~DATA'
118.221.246.17

bash:

#!/bin/bash
IFS='~'

while read -a array;
do
    echo ${array[1]}
done < ip

如果字符串是常量,则以下参数扩展执行子字符串提取:

$ a=20110906000418~118.221.246.17~DATA~DATA~DATA
$ echo ${a:15:14}
118.221.246.17

或在 bash 中使用正则表达式:

$ echo $(expr "$a" : '[^~]*~\([^~]*\)~.*')
118.221.246.17

最后一种,再次使用纯 bash 方法:

$ tmp=${a#*~}
$ echo $tmp
118.221.246.17~DATA~DATA~DATA
$ echo ${tmp%%~*}
118.221.246.17

one more, using perl:

$ perl -F~ -lane 'print $F[1]' <<< '20110906000418~118.221.246.17~DATA~DATA~DATA'
118.221.246.17

bash:

#!/bin/bash
IFS='~'

while read -a array;
do
    echo ${array[1]}
done < ip

If string is constant, the following parameter expansion performs substring extraction:

$ a=20110906000418~118.221.246.17~DATA~DATA~DATA
$ echo ${a:15:14}
118.221.246.17

or using regular expressions in bash:

$ echo $(expr "$a" : '[^~]*~\([^~]*\)~.*')
118.221.246.17

last one, again using pure bash methods:

$ tmp=${a#*~}
$ echo $tmp
118.221.246.17~DATA~DATA~DATA
$ echo ${tmp%%~*}
118.221.246.17
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文