如何从字符串中提取索引?

时间:2015-04-30 09:14:01

标签: linux shell awk sed ash

我的文件包含如下所示的数据:

{ "any1", "aaa.bbb.ccc.1.ddd", "var1" }
{ "any2", "aaa.bbb.ccc.1.eee", "toto" }
{ "an42", "aaa.bbb.ccc.1.fff", "titi" }
{ "an47", "aaa.bbb.ccc.2.eee", "var3" }
{ "any7", "aaa.bbb.ccc.2.ddd", "var12" }
{ "a789", "aaa.bbb.ccc.2.fff", "var14" }
{ "any1", "xxx.yyy.zzz.1.ddd", "var1" }
{ "any2", "xxx.yyy.zzz.1.eee", "toto" }
{ "an42", "xxx.yyy.zzz.1.fff", "titi" }

我想提取前缀"aaa.bbb.ccc"

的所有索引

所以命令应该返回

linux# command
1
2

我如何通过sedawkgrepsort来实现这一目标?

3 个答案:

答案 0 :(得分:4)

例如,您可以说:

$ grep -Po '(?<=aaa\.bbb\.ccc\.)\d*' file | sort -u
1
2

一步一步

获取aaa\.bbb\.ccc\.之后的数字(注意我们将点数与点本身相匹配,而不是任何字符):

$ grep -Po '(?<=aaa\.bbb\.ccc\.)\d*' file
1
1
1
2
2
2

sort他们找到了唯一的值:

$ grep -Po '(?<=aaa\.bbb\.ccc\.)\d*' file | sort -u
1
2

替代sed

如果您的-P中没有grep选项,则可以使用sed

$ sed -nr 's/^.*aaa\.bbb\.ccc\.([0-9]+).*$/\1/p' file
1
1
1
2
2
2
$ sed -nr 's/^.*aaa\.bbb\.ccc\.([0-9]+).*$/\1/p' file | sort -u
1
2

答案 1 :(得分:0)

- (void)updateScrollViewContentSize
{
    float cellHeight = 40;
    int numberOfRows = [noOfItemsInArray count];

    float sizeOfContent = cellHeight * numberOfRows;

    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, sizeOfContent);
}

有趣和1(posix)sed,未分类。 (GNU sed允许在线版本)

答案 2 :(得分:0)

Explicitly discard the result of the closure by assigning to '_'替代方案:

awk

步骤:

  1. $ awk -F\. '/aaa.bbb.ccc.[0-9]+/{b=$(NF-1);if (!(b in a)){ print b}a[b]++}' infile 分隔符设置为FS
  2. 寻找想要的模式
  3. 将索引值存储在dot变量
  4. 使用关联数组b标记打印的索引键。
  5. 如果a不在b打印索引(a的键)
相关问题