使用 sed 查找、比较和替换文本

使用 sed 查找、比较和替换文本

我在一个文件中有一个文本

测验

Worker(Thomas) works in .......... 
Worker(Alfred) works in .......... 
Worker(Albert) works in .......... 

回答

Worker(Thomas) works for company(google) 
Worker(Alfred) works for company(apple)
Worker(Albert) works for company(Microsoft)

我希望使用基于 sed 的文本搜索、匹配和替换来用“答案”中给出的信息替换“测验”中的空虚线。

答案1

我建议使用awk来完成这项任务。假设您有两个单独的文件Quiz并且Answer位于同一目录中,cd请进入该目录并在终端中运行以下命令:

awk 'NR==FNR{a[$1]=$4; next}{$4=a[$1]; print}' > Answered_Quiz Answer Quiz

Answered_Quiz将在同一目录中创建一个名为的新文件,该文件将包含所需的结果。

如果所有行都在一个文件中,您可以先将其拆分:

运行以下命令并替换FileName您的文本文件名:

awk '$4 ~ /(^[\.]+$)/' > Quiz FileName 

制作测验文件。

然后运行以下命令替换FileName您的文本文件名:

awk '$4 !~ /(^[\.]+$)/' > Answer FileName

获取答案文件。您的原始文件不会受到影响


或者,如果所有行都在一个文件中,并且您不想拆分文件,请在同一Enter目录中使用脚本文件中的以下代码(或者您可以将其复制并粘贴到终端中,然后按 ):

#!/bin/bash

pat1="(^[\.]+$)"


while read f1 f2 f3 f4 f5
                do

                        if [[ "$f4" =~ $pat1 ]]

                        then
                        # change Quiz in the following line with your source file name
                        a4=$(awk -v ff1="$f1" '$4 !~ /(^[\.]+$)/ && $1 == ff1 {print $4}' "Quiz")

                        echo "$f1 $f2 $f3 $a4" >> "Answered_Quiz" 
                        fi
                # change Quiz in the following line with your source file name
                done < "Quiz"

将在同一目录中创建一个名为 Answered_Quiz 的新文件,它将包含所需的结果。

祝你好运

相关内容