首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix脚本。如何在一个文件中搜索一个关键字,而另一个关键字删除整行?

Unix脚本。如何在一个文件中搜索一个关键字,而另一个关键字删除整行?
EN

Stack Overflow用户
提问于 2020-12-01 23:16:46
回答 1查看 42关注 0票数 0

我是新手,我真的很感激任何帮助。我需要编写一段Unix代码来搜索文件X中的字符串,然后在文件目标中进行搜索,删除之前找到的行……

我已经做了几次类似下面的尝试,但都不起作用。

代码语言:javascript
复制
grep -v "Invalid key: " issues.txt > translate1.stf ; mv translate1.stf  issues.txt

致以最好的问候,EB

enter image description here

EN

回答 1

Stack Overflow用户

发布于 2020-12-02 22:44:30

如果我理解您的请求,您希望删除fileX中字符串介于"Invalid Key:“和下一个句点('.')之间的任何行。包含在fileY中。

这可以在awk中完成。

如果fileX名为"input.txt“并包含

代码语言:javascript
复制
Line 1
Invalid Key: Key1. this line shows
Line 2
Invalid Key: Key2. this line is filtered
Invalid Key: Key3. this line is filtered
Invalid Key: Key4. this line shows
Line 3

fileY被命名为"keysToFilter.txt“

代码语言:javascript
复制
# lines containing these keys are deleted
Key2
Key3

和文件"filter“中的一个程序

代码语言:javascript
复制
#! /usr/bin/awk -f

BEGIN {
  while (getline < "keysToFilter.txt") {
    keys[$0] = 1
  }
}

# lines matching 'Invalid Key' get this treatment
/^Invalid Key: / {
  keyStart = length("Invalid Key: ") + 1
  keyEnd = index($0, ".")
  key = substr($0, keyStart, keyEnd - keyStart)
  if ( !(key in keys) ) {
    print $0
  }
  next 
}

# every other line is unfiltered  
{ print }

..。然后,下面的代码将向stdout发送一个经过过滤的fileX版本

代码语言:javascript
复制
$ cat input.txt | ./filter
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65093242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档