【问题标题】:How do I split a number of words on delimiter in sed or with awk如何在 sed 或使用 awk 的分隔符上拆分多个单词
【发布时间】:2014-05-29 13:12:03
【问题描述】:

备注: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 分割分隔符之前的单词和分隔符之后的单词(我写了一个 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 语法需要什么,以便在 delimiter 之前和之后获取单词,

解决办法应该是这样的

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

【问题讨论】:

    标签: linux awk sed


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • 我想你错过了第二个 --> "
    • 由于某种原因我在一行中得到了它 --> words_before=n34r 38&Y EYH #EYHDCmhf453gfnwords_after=,e73e3bnd2wbyzd fr fr4fn3r f 4df 3
    • 你可以试试 ctrl+shift+u 并输入十六进制代码换行a
    【解决方案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}'
    

    【讨论】:

      【解决方案3】:

      这会做你想要的吗?

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

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

      【讨论】:

        【解决方案4】:

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

        $ 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/" ,当单词之间没有空格到 "="
        猜你喜欢
        • 2016-01-04
        • 2017-08-25
        • 1970-01-01
        • 2019-11-12
        • 2013-06-07
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多