0

这应该非常简单,但是对于我来说,今天下午我就是无法使用 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 的答案。

4

3 回答 3

1

这是一个简单的答案:

sed 's/^ [^,]*$/>&/'
于 2013-05-23T22:19:59.860 回答
1

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

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

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

于 2013-05-23T22:15:50.863 回答
1

尝试这个:

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

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

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

于 2013-05-23T22:19:01.013 回答