Linux 如何在sed或awk中拆分分隔符上的多个单词
备注:soultion只能与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
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