【问题标题】:Grep find pattern but print another lineGrep 找到模式但打印另一行
【发布时间】:2018-01-30 14:29:45
【问题描述】:

我想匹配所有西里尔字符,但将 ID 打印到文件中。例如:

Author: Doe, John
Title: Оптимизация ресурсного потенциала промышленности города с учетом его конкурентных преимуществ
ID: 1234567

我目前的方法是 grep 西里尔字符:

grep -i -r --include=*{rdf,redif,rdf~} --color="auto" -P -n '[\x{0400}-\x{04FF}]' > cyrillic.txt

如何将 ID 行打印到文件而不是匹配行?

【问题讨论】:

    标签: grep


    【解决方案1】:

    如果ID: 行就在匹配模式之后,则使用-A1 选项。然后将其通过管道传输到另一个grep 以获取ID: 的行。

     grep -A1 -i -r --include=*{rdf,redif,rdf~} --color="auto" -P -n '[\x{0400}-\x{04FF}]' \
     | grep 'ID: ' > cryllic.txt
    

    【讨论】:

    • 对不起,我的措辞含糊不清。 'ID' 可能在文件中的某个位置,它并不总是跟在 'title' 字符串之后。
    • 那你为什么不直接使用grep 'ID: ' inputfile
    • 我有一组 n 个文件,其中只有一些包含西里尔字符。所以首先我必须 grep 获取 unicode 字符代码。
    【解决方案2】:

    使用 grep 标志 h - 禁止输出文件名 - 您将得到如下输出:

    4:string with matching pattern
    5:string with matching pattern
    7:string with matching pattern
    

    现在您可以将此输出通过管道传输到 awk 并仅打印匹配字符串编号的第一列:

    {your_grep} | awk -F ':' '{print $1}' > cyrillic.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      相关资源
      最近更新 更多