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

时间:2013-11-10 22:37:48

标签: linux shell

如果缺少字符串自动添加它,我如何检查文件中的字符串 输入

输入文件test.txt

  1. 这是用于测试目的的测试文本
  2. 这是测试目的的测试
  3. 这是测试目的的测试
  4. 这是用于测试目的的测试文本
  5. 我想在所有行中添加“text”

    期望输出

    1. 这是用于测试目的的测试文本
    2. 这是用于测试目的的测试文本
    3. 这是用于测试目的的测试文本
    4. 这是用于测试目的的测试文本
    5. 有可能吗?非常感谢提前

      大家好,感谢您的帮助,因为我的情况并非那么简单。我不知道哪一行会有所不同,在中间的字符串中它不仅会有一个字符串。我会给出一个更清楚的案例

      输入文件test.txt

      1. 组:IT_DEPT,VIP角色:观察部门:IT
      2. 集团:IT_DEPT,VIP部门:IT
      3. Group:FINANCE LOAN VIEWER角色:观察部门:财务
      4. 集团:财务贷款查看部门:财务
      5. 所需的输出文件test2.txt

        1. 组:IT_DEPT,VIP角色:观察部门:IT
        2. 组:IT_DEPT,VIP角色: - 部门:IT
        3. Group:FINANCE LOAN VIEWER角色:观察部门:财务
        4. Group:FINANCE LOAN VIEWER职责: - 部门:财务
        5. 所以那些缺少“角色:”的人会加上“角色: - ”,希望这清楚的事情,再次提前感谢

3 个答案:

答案 0 :(得分:0)

不是最干净的,但这符合您的要求:

#!/bin/bash

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

答案 1 :(得分:0)

对于你当前的例子,这个awk单行应该可以工作:

awk '$5!="text"{$5="text "$5}7' file

试验:

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

答案 2 :(得分:0)

如果你将问题正式化了一下会有所帮助:目前还不清楚确定“角色:”文本应该在哪里的标准是什么。然后,实现将是在正则表达式替换中重新表达它的问题。例如,如果你想在第二个':'之前总是拥有'角色',那么你可以这样做:

perl -pe 's/^(.*?:.*?)(?:\sRole)?:/$1Role:/' test.txt

如果你想用“ - ”表示替换的位置,那么稍微复杂的表达式将是:

perl -pe 's/^([^:]+:[^:]+)(?<!Role):/$1 Role: -/' 1.txt

输出:

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

这不是你的例子中的确切输出,但是你需要将你想要的位置正式化为'角色: - '。我把第二个':'作为一个例子。

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

perl -pe 's/Dept:/Role: - Dept:/ unless /Role:/' 1.txt

输出:

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