Bash 如何从灰色字符串中获取数据?

Bash 如何从灰色字符串中获取数据?,bash,sed,grep,Bash,Sed,Grep,我需要从灰色字符串中获取数据,但我是个新手 我已将数据字符串如下所示: email=test@mail.com&id=12451233&name=Susanna&surname=Scott&street=East sed -e 's/email\ \(.*\)&id/\1/' 我需要分析电子邮件,身份证,姓名和姓氏从这个 试着这样做: email=test@mail.com&id=12451233&name=Susanna&su

我需要从灰色字符串中获取数据,但我是个新手

我已将数据字符串如下所示:

email=test@mail.com&id=12451233&name=Susanna&surname=Scott&street=East
sed -e 's/email\ \(.*\)&id/\1/'
我需要分析电子邮件,身份证,姓名和姓氏从这个

试着这样做:

email=test@mail.com&id=12451233&name=Susanna&surname=Scott&street=East
sed -e 's/email\ \(.*\)&id/\1/'
什么也没发生(需要使用sed执行) 第二步是一个接一个地显示数据

预期格式:

test@mail.ru|12451233|Susanna|Scott

您可以使用
awk

awk -F "=|&" '{print $2, $4, $6, $8}'

-F
是分隔符,在您的情况下,它们是
=
或(
&
,然后只打印列。

您可以使用
awk

awk -F "=|&" '{print $2, $4, $6, $8}'

-F
是分隔符,在您的情况下,它们是
=
或(
|
&
,然后只打印列。

下面是一个sed答案-简单但可以完成任务:

sed -e 's/email=//' -e 's/&id=/ /' -e 's/&name=/ /' -e 's/&surname=/ /' -e 's/&street=.*//'
回顾这个问题,我发现您正在寻找管道分隔的输出。好的,下面是稍微修改过的用于管道输出的sed脚本:

sed -e 's/email=//' -e 's/&id=/|/' -e 's/&name=/|/' -e 's/&surname=/|/' -e 's/&street=.*//' 

下面是一个sed答案-简单但能完成任务:

sed -e 's/email=//' -e 's/&id=/ /' -e 's/&name=/ /' -e 's/&surname=/ /' -e 's/&street=.*//'
回顾这个问题,我发现您正在寻找管道分隔的输出。好的,下面是稍微修改过的用于管道输出的sed脚本:

sed -e 's/email=//' -e 's/&id=/|/' -e 's/&name=/|/' -e 's/&surname=/|/' -e 's/&street=.*//' 


…|tr'&'\n'
sed-e's/&/\n/g'
?@Jane如果您也能概述预期的输出格式,那将非常有用!是,我显示的数据正确。但在这种情况下,我不需要完整的数据,因为还有一些不必要的字段,
可能会重复tr'&'\n'
sed-e's/&/\n/g'
?@Jane如果您也能概述预期的输出格式,那将非常有用!是,我显示的数据正确。但在这种情况下,我不需要完整的数据,因为还有一些不必要的字段可能重复Yes,它显示了我需要的内容,但问题在于awk:我不是唯一一个使用bash脚本的工作人员,我显示的请求稍微大一点,这就是为什么我要求sed提供帮助)好的,而不是从@MarkYes尝试回答,它显示了我需要的内容,但问题出在awk中:我不是唯一一个使用bash脚本的人,我显示的请求稍微大一点,这就是为什么我请求sed的帮助)好的,而不是尝试@MarkYes的答案,这就是我需要的。出于教育目的:例如,如果电子邮件和id之间有一个不必要的字段,我如何删除它?在命令中添加-e(编辑)命令&street已经是删除不必要字段的一个示例(嗯,这有点苛刻,因为它删除了&street标记之后的所有内容。您可以删除一个特定标记,如
-e's/&trash=[^&]*//“
可以删除从&trash到下一个&id的所有内容。或者如果你想删除从email到&id的所有内容,你可以尝试以下方法:
-e's/email=.*&id/&id/”
-基本上我一直使用的s命令是s/find/replace/。谢谢!如果还不够困难的话,还有一个命令:是否可以更改显示部分的顺序?姓氏->名称->phone->id f.e.Awk可以轻松地重新排列结果。尝试将其管道化到“Awk
{print$4,$3,$2,$1}”
是的,这就是我需要的。出于教育目的:f.e.如果电子邮件和id之间有一个不必要的字段,我如何删除它?在命令中添加-e(编辑)命令。&street已经是删除不必要字段的示例(好吧,这有点苛刻,因为它删除了&street令牌之后的所有内容。您可以删除一个特定的令牌,如
-e's/&trash=[^&]*//“
可以删除从&trash到下一个&id的所有内容。或者如果你想删除从email到&id的所有内容,你可以尝试以下方法:
-e's/email=.*&id/&id/”
-基本上我一直使用的s命令是s/find/replace/。谢谢!如果还不够困难的话,还有一个命令:是否可以更改显示部分的顺序?姓氏->名称->phone->IDF.e.Awk可以轻松地重新排列结果。尝试将其管道化到“Awk
{print$4,$3,$2,$1}”