【问题标题】:Need sed help deleting 2nd and 3rd to last column需要 sed 帮助删除倒数第二列和第三列
【发布时间】:2015-12-13 18:28:49
【问题描述】:

我需要使用 sed 来更改以下几行

rec.autos.sport.f1 0000001427 0000000001 y
rec.autos.sport.misc 0000000177 0000000001 y
rec.music.bluenote.blues 0000000531 0000000001 y
sci.med.transcription 0000000187 0000000001 m
test.test.222 0000000000 00001 m

进入这个

addgroup rec.autos.sport.f1 y
addgroup rec.autos.sport.misc y
addgroup rec.music.bluenote.blues y
addgroup sci.med.transcription m
addgroup test.test.222 m

我用

搞定了 addgroup 部分
s/\(^[a-zA-Z]\)/addgroup \1/g

我是使用 sed 的新手,所以我不知道如何实现这一点。如果有人回答对您所做的事情的快速解释会很有帮助。

【问题讨论】:

  • s/^\([^[:blank:]]\+\)[[:blank:]]\([^[:blank:]]\+[[:blank:]]\)\{2\}\(.*\)$/addgroup \1 \3/g

标签: bash awk sed


【解决方案1】:
sed 's/^\([^ ]\+\)[ 0-9]\+\(.\)$/addgroup \1 \2/'

【讨论】:

    【解决方案2】:

    另一个使用 tr 的 awk 解决方案来标准化空白

    awk '{$1="addgroup "$1;$2=$3=""}1' file | tr -s ' '
    

    【讨论】:

      【解决方案3】:

      使用 sed

      在您的命令之后添加第二个替代命令:

      $ sed -e 's/\(^[a-zA-Z]\)/addgroup \1/' -e 's/\( [^[:blank:]][^[:blank:]]*\)\{2\}\( [^[:blank:]]*\)$/\2/g' file
      addgroup rec.autos.sport.f1 y
      addgroup rec.autos.sport.misc y
      addgroup rec.music.bluenote.blues y
      addgroup sci.med.transcription m
      addgroup test.test.222 m
      

      或者,将它们组合成一个s 命令:

      $ sed -e 's/\(.*\)\( [^[:blank:]][^[:blank:]]*\)\{2\}\( [^[:blank:]][^[:blank:]]*\)$/addgroup \1 \3/g' file
      addgroup rec.autos.sport.f1  y
      addgroup rec.autos.sport.misc  y
      addgroup rec.music.bluenote.blues  y
      addgroup sci.med.transcription  m
      addgroup test.test.222  m
      

      使用扩展的正则表达式,我们可以避免所有这些反斜杠。使用 GNU sed:

      $ sed -r 's/(.*)( [^[:blank:]]+){2}( [^[:blank:]]+)$/addgroup \1 \3/g' file
      addgroup rec.autos.sport.f1  y
      addgroup rec.autos.sport.misc  y
      addgroup rec.music.bluenote.blues  y
      addgroup sci.med.transcription  m
      addgroup test.test.222  m
      

      使用 GNU awk

      OP 要求 sed。不过,对于那些好奇的人,这里有一个 GNU awk 解决方案:

      $ awk '{$(NF-2)=$NF; NF-=2; printf "addgroup %s\n",$0;} ' file
      addgroup rec.autos.sport.f1 y
      addgroup rec.autos.sport.misc y
      addgroup rec.music.bluenote.blues y
      addgroup sci.med.transcription m
      addgroup test.test.222 m
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-19
        • 1970-01-01
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 2017-08-02
        • 2017-06-27
        • 2011-09-04
        相关资源
        最近更新 更多