使用Sed修改具有初始空格并包含逗号的行

时间:2013-05-23 22:08:11

标签: sed

这应该是非常简单的,但对于我的生活,我今天下午就无法做到这一点。

有问题的文件包含如下所示的行:

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

我需要在“MIN-3”行之前添加一行“>”角色,唯一明确区分这些线条的是两件事:

  1. 第一个字符是空格“”。
  2. 这些行不包含逗号。
  3. 我主要尝试过以下任何一种情况:

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

    我承认,我对sed有些新意。 :)

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

3 个答案:

答案 0 :(得分:1)

根据你的描述,这应该做:

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

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

答案 1 :(得分:1)

试试这个:

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

输出只有带有MIN-3

>的行

sed默认使用基本正则表达式。因此,+应该是您脚本中的\+。我认为这可能是造成时间浪费的问题。但是,你可以添加-r来让sed使用extended-regex。

答案 2 :(得分:1)

这是一个简单的答案:

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