【问题标题】:Use Sed to modify a line that has an initial space and contains a comma使用 Sed 修改具有初始空格并包含逗号的行
【发布时间】:2013-05-19 10:46:08
【问题描述】:

这应该非常简单,但对于我来说,今天下午我就是无法使用 gnu-sed 来完成它。

相关文件的行如下所示:

                        PART NUMBER  PART NUMBER     QUANTITY WEIGHT         -999   -4,999  -9,999
w/ UL APPROVAL
                                          MIN-3

我需要在每一行前面加上一个“>”字符,比如“MIN-3”行,唯一能将这些行与其他行区别开来的是两件事:

  1. 第一个字符是空格“”。
  2. 这些行不包含逗号。

我主要尝试过以下任何一种方法:

/^ +[^,]+$/ s/^/>/

/^ +[\w\-]+$/ s/^/>/

/^ +(\w|\-)+$/ s/^/>/

我承认,我对 sed 有点陌生。 :)

编辑:尽管我最初的目标是 sed,但也可以赞赏使用 perl 或 awk 的答案。

【问题讨论】:

    标签: sed


    【解决方案1】:

    试试这个:

    sed '/^ [^,]*$/s/^/>/'
    

    输出是,只有MIN-3 和前导> 的行

    sed 默认使用基本的正则表达式。所以+ 在你的脚本中应该是\+。我认为这可能是浪费你时间的问题。但是,您可以添加 -r,让 sed 使用扩展正则表达式。

    【讨论】:

    • 哈!这正是我的问题所在。谢谢
    【解决方案2】:

    根据您的描述,应该这样做:

    sed 's/^\([ ][^,]*\)$/> \1/' input
    

    如果该行以空格开头,然后包含除逗号之外的任何内容,则匹配整行。

    【讨论】:

      【解决方案3】:

      这是一个简单的答案:

      sed 's/^ [^,]*$/>&/'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 2022-09-22
        • 2020-11-14
        • 2011-09-30
        相关资源
        最近更新 更多