Grep -w忽略连字符[ - ]

时间:2017-09-06 09:59:59

标签: grep

我的文字文件Progress Bar如下所示

    object UpdateLock=new object();
    List<Action<object, UpdateArgs>> UpdateSubscribersList = new List<Action<object, UpdateArgs>>();
    public void UpdateSubscribe(Action<object, UpdateArgs> action)
    {
        lock (UpdateLock)
        {
            UpdateSubscribersList.Add(action);
        }
    }
    public bool UpdateUnSubscribe(Action<object, UpdatePortfolioArgs> action)
    {
        lock (UpdateLock)
        {
            return UpdateSubscribersList.Remove(action);
        }
    }
    public virtual void onUpdate(UpdateArgs args)
    {
        lock (UpdateLock)
        {
            foreach (Action<object, UpdateArgs> action in UpdateSubscribersList)
            {
                action.BeginInvoke(args, null, null);
            }
        }
    }

我想使用grep提取仅包含S-PA的行。我尝试了以下命令:

let imagePath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("image.jpg")

但它给出的输出包括我不想要的所有条目。我想要以下输出

sample.txt

请指导我。提前谢谢。

3 个答案:

答案 0 :(得分:4)

使用负向前瞻和后视。

$ grep -P '(?<![\w-])S-PA(?![\w-])' sample.txt
ID=S-PA.path1;Name=S-PA 69 ivcs

有效地,您将-加入&#34;字&#34;用于字边界考虑。

(?<![\w-])确保S-PA前面没有单词字符或-。 同样地(?![\w-])确保以下字符相同。

答案 1 :(得分:2)

使用正则表达式。

grep -oE "S-PA (.+)" sample.txt

egrep -o "S-PA (.+)" sample.txt

答案 2 :(得分:2)

您似乎希望将=S-PA与空格匹配。使用

grep '=S-PA ' sample.txt

grep '=S-PA[[:blank:]]' sample.txt

其中[[:blank:]]匹配常规空格或制表符。

请参阅this regex demo showing how this regex works