Linux 如何在sed或awk中拆分分隔符上的多个单词

Linux 如何在sed或awk中拆分分隔符上的多个单词,linux,awk,sed,Linux,Awk,Sed,备注:soultion只能与sed或awk一起使用 我有以下几行:(来自文件的示例) 在以下示例中,我们看到: 在“=”分隔符之前,我们有单词 jn34r 38&Y EY$@H #EY$@HDCmhf453gf ,e73e3bnd2wbyzd fr fr4fn3r f 4df 3 在“=”分隔符后面是单词 jn34r 38&Y EY$@H #EY$@HDCmhf453gf ,e73e3bnd2wbyzd fr fr4fn3r f 4df 3 所以现在我想通过sed

备注:soultion只能与sed或awk一起使用

我有以下几行:(来自文件的示例)

在以下示例中,我们看到:

在“=”分隔符之前,我们有单词

  jn34r 38&Y EY$@H #EY$@HDCmhf453gf
,e73e3bnd2wbyzd fr fr4fn3r f 4df 3
在“=”分隔符后面是单词

  jn34r 38&Y EY$@H #EY$@HDCmhf453gf
,e73e3bnd2wbyzd fr fr4fn3r f 4df 3
所以现在我想通过sed将delimiter前面的单词和delimiter后面的单词分开(我编写了一个sed语法-但是这个sed命令给出了部分解决方案

示例:

        echo "jn34r 38&Y EY$@H #EY$@HDCmhf453gf=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3" | sed "s .*\(=\) \1 "  | sed s'/=//g'
我得到以下结果

,e73e3bnd2wbyzd fr fr4fn3r f 4df 3
大家都知道sed给我定界符后面的单词

我想得到的是分隔符之前和之后的单词

请告知我的sed语法需要什么,以便获得分隔符前后的单词

解决方案应该是这样的

 words_before=jn34r 38&Y EY$@H #EY$@HDCmhf453gf
 words_after=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3

有很多方法可以做到这一点。这取决于你的目标是什么。这对你有用吗

$ echo "asdf asdf asdf asdf  = geitgm gao dbageiobna eb" | sed "s/=/\n/"
asdf asdf asdf asdf  
 geitgm gao dbageiobna eb
这适用于有空间和无空间的情况:

$ echo "asdfa asdf asd fasd f=sfsafd asdf asd fasdf " | sed 's/=/\n/'
asdfa asdf asd fasd f
sfsafd asdf asd fasdf 

有很多方法可以做到这一点。这取决于你的目标是什么。这对你有用吗

$ echo "asdf asdf asdf asdf  = geitgm gao dbageiobna eb" | sed "s/=/\n/"
asdf asdf asdf asdf  
 geitgm gao dbageiobna eb
这适用于有空间和无空间的情况:

$ echo "asdfa asdf asd fasd f=sfsafd asdf asd fasdf " | sed 's/=/\n/'
asdfa asdf asd fasd f
sfsafd asdf asd fasdf 

这能满足你的要求吗

$ awk -F= '{printf "%s\n%s\n", $1, $2}' x
jn34r 38&Y EY$@H #EY$@HDCmhf453gf
,e73e3bnd2wbyzd fr fr4fn3r f 4df 3

这很容易修改,以提供前导和/或尾随文本(对于
=
分隔符之前和之后的部分,这甚至可能是不同的)。

这会满足您的需要吗

$ awk -F= '{printf "%s\n%s\n", $1, $2}' x
jn34r 38&Y EY$@H #EY$@HDCmhf453gf
,e73e3bnd2wbyzd fr fr4fn3r f 4df 3

这很容易修改,以提供前导和/或尾随文本(对于
=
分隔符之前和之后的零件,这些文本甚至可能不同)。

awk中,您可以使用
-F
选项设置分隔符:

echo "jn34r 38&Y EY$@H #EY$@HDCmhf453gf=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3" | awk -F= '{print "words_before="$1"\nwords_after="$2}'

awk中,您可以使用
-F
选项设置分隔符:

echo "jn34r 38&Y EY$@H #EY$@HDCmhf453gf=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3" | awk -F= '{print "words_before="$1"\nwords_after="$2}'
试试这个:

echo <source> | sed "s/\(.*\)=/words_before=\1\nwords_after=/" 
输出:

words_before=n34r 38&Y EYH #EYHDCmhf453gf
words_after=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3
试试这个:

echo <source> | sed "s/\(.*\)=/words_before=\1\nwords_after=/" 
输出:

words_before=n34r 38&Y EYH #EYHDCmhf453gf
words_after=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3

不好-当-echo“asdf asdf asdf asdf=geitgm gao dbageiobna eb”| sed“s/=/\n/”,当单词之间没有空格时,不好-当-echo“asdf asdf asdf asdf=geitgm gao dbageiobna eb”| sed“s/=/\n/”,当单词之间没有空格时,我想你错过了第二个-->“出于某种原因,我在一行中得到了它-->words_before=n34r 38&Y EYH#EYHDCmhf453gfnwords_after=,e73e3bnd2wbyzd fr fn3r f 4df 3您可以尝试ctrl+shift+u并键入十六进制代码以换行
a
我想您错过了第二行-->“出于某种原因,我在一行中得到了它-->words_before=n34r 38&Y EYH#EYHDCmhf453gfnwords_after=,e73e3bnd2wbyzd fr fn3r f 4df 3您可以尝试按住ctrl+shift+u并键入换行符的十六进制代码
a