备注:灵魂必须只有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
答案 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