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

时间:2014-05-29 13:12:03

标签: linux awk sed

备注:灵魂必须只有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(我写了一个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

4 个答案:

答案 0 :(得分:2)

试试这个:

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

测试代码:

echo "n34r 38&Y EY$@H #EY$@HDCmhf453gf=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3" \
  | sed "s/\(.*\)=/words_before=\1\nwords_after=/" 

输出:

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

答案 1 :(得分:1)

这会做你想要的吗?

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

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

答案 2 :(得分:1)

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}'

答案 3 :(得分:0)

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

$ 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