1

我有一个文本文件,其中包含如下行

![](screeshot-3.jpg)
The above screenshot shows how you can delete posts by tags.

![](screeshot-4.jpg)
The above screenshot shows how you can delete posts by custom taxonomies.

我想将这些行替换为(注意行号是从上一行的文件名中检索的)

3. The above screenshot shows how you can delete posts by tags.

4. The above screenshot shows how you can delete posts by custom taxonomies.

不应编辑其他行。

我可以编写一个正则表达式来匹配这个数字,但是我不确定在替换时如何再次引用这个数字。

请让我知道如何在 awk 中执行此操作。

更新:请注意,我不能使用 GNU 版本,它需要同时在 Mac 和 Ubuntu 中工作。

4

3 回答 3

3

使用 GNU awk 扩展至match()

gawk '
    match($0, /^!\[\].*-([0-9]+)\.jpg/, m) {
        printf "%d. ", m[1]
        next
    }
    1
' file.txt
于 2013-10-17T14:53:07.187 回答
1

一种方法是用字符.和分割前一行-,并提取第二个位置,保存在变量中并将其用于非空白的每一行:

awk '
    $0 ~ /^!\[\]/ { 
        split($0, arr, /[-.]/)
        num = arr[2]
        next 
    } 
    num {
        print num ". " $0
        num = 0
        next
    } 
    { print }
' infile

它产生:

3. The above screenshot shows how you can delete posts by tags.

4. The above screenshot shows how you can delete posts by custom taxonomies.

编辑:对不起。我没有读到您不能使用该GNU版本。我已经评论了\S不支持的模式[^[:blank:]]。我希望它现在有效。

于 2013-10-17T14:52:53.880 回答
1

如果您对 perl 没问题,那么您可以使用以下版本:

perl -lne 'if(/^\!.*-([\d]+)\.jpg/)
           {$a=$1}
           elsif(/^[a-zA-Z]/)
           {print "$a \. $_"}' your_file
于 2013-10-18T06:40:16.843 回答