首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在linux中查找字符串并将其添加到文件中

如何在linux中查找字符串并将其添加到文件中
EN

Stack Overflow用户
提问于 2013-11-10 22:37:47
回答 3查看 115关注 0票数 1

如果缺少字符串,如何检查文件是否自动添加(例如输入)

输入文件test.txt

  1. 这是一个用于测试的测试文本。
  2. 这是一个测试的目的。
  3. 这是一个测试的目的。
  4. 这是一个用于测试的测试文本。

我想在所有行中加上“文本”。

期望输出

  1. 这是一个用于测试的测试文本。
  2. 这是一个用于测试的测试文本。
  3. 这是一个用于测试的测试文本。
  4. 这是一个用于测试的测试文本。

有可能吗?事先非常感谢

嗨,伙计们,谢谢你们的帮助,因为我的案子没那么简单。我不知道哪一行会不同,在中间的字符串中,它不仅有一个字符串。我会给出一个更清楚的例子

输入文件test.txt

  1. 组: IT_DEPT,VIP角色:查看部: IT
  2. 集团: IT_DEPT,VIP部: IT
  3. 组:财务贷款查看器角色:查看器部:财务
  4. 集团:财务贷款审核部:财务部

所需输出文件test2.txt

  1. 组: IT_DEPT,VIP角色:查看部: IT
  2. 集团: IT_DEPT,VIP角色:-部门: IT
  3. 组:财务贷款查看器角色:查看器部:财务
  4. 组:财务贷款查看者角色:-部门:财务

所以那些缺少“角色”的人将添加“角色”:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-11 21:28:41

如果你把你的问题正规化一点的话,它会有帮助:目前还不清楚什么是确定“角色:”文本应该在什么位置的标准。然后,实现将是在正则表达式替换中重新定义它的问题。例如,如果您希望始终在第二位之前拥有“角色”:“那么您可以这样做:

代码语言:javascript
复制
perl -pe 's/^(.*?:.*?)(?:\sRole)?:/$1Role:/' test.txt

如果您想显示使用'-‘进行替换的位置,那么稍微复杂一些的表达式将是:

代码语言:javascript
复制
perl -pe 's/^([^:]+:[^:]+)(?<!Role):/$1 Role: -/' 1.txt

输出:

代码语言:javascript
复制
Group: IT_DEPT,VIP Role: Viewer Dept: IT
Group: IT_DEPT,VIP Dept Role: - IT
Group: FINANCE LOAN VIEWER Role: Viewer Dept: FINANCE
Group: FINANCE LOAN VIEWER Dept Role: - FINANCE

它不是像你的例子中那样精确的输出,但是同样,你需要正规化你想要添加的角色:-。我拿第二名:“举个例子。”

可以通过更简单的代码来实现精确的输出:

代码语言:javascript
复制
perl -pe 's/Dept:/Role: - Dept:/ unless /Role:/' 1.txt

输出:

代码语言:javascript
复制
Group: IT_DEPT,VIP Role: Viewer Dept: IT
Group: IT_DEPT,VIP Role: - Dept: IT
Group: FINANCE LOAN VIEWER Role: Viewer Dept: FINANCE
Group: FINANCE LOAN VIEWER Role: - Dept: FINANCE
票数 0
EN

Stack Overflow用户

发布于 2013-11-10 22:53:10

不是最干净的,但这将满足您的要求:

代码语言:javascript
复制
#!/bin/bash

awk '{
    for(i = 1; i <= NF; i++) {
        if ($i == "test" && $(i + 1) != "text") {
            $i = "test text"
        }
    }
    print $0
}' input_file > output_file
票数 0
EN

Stack Overflow用户

发布于 2013-11-10 23:00:27

对于当前的示例,这个awk一行程序应该可以工作:

代码语言:javascript
复制
awk '$5!="text"{$5="text "$5}7' file

测试:

代码语言:javascript
复制
kent$  cat f 
this is a test text for testing purpose
this is a test for testing purpose
this is a test for testing purpose
this is a test text for testing purpose

kent$  awk '$5!="text"{$5="text "$5}7' f
this is a test text for testing purpose
this is a test text for testing purpose
this is a test text for testing purpose
this is a test text for testing purpose
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19896160

复制
相关文章

相似问题

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