sed中如何使用like(。*)操作来搜索模式(例如:STRING。*)并将“ *”附加到匹配字符串的末尾。

下面是示例:

猫文件1.txt
MAC书
现代机器
机械学
安装
磁盘
数据信息学


猫file2.txt
苹果电脑
数据


用于$(cat file2.txt | uniq)中的行

    sed -i“ /$line.*/s/$line.*/$line.**/” file1.txt
做完了


预期产量:

猫文件1.txt

MAC *书
现代机器*
机械学
安装
磁盘
数据*信息

最佳答案

单线:

$ sed -r '/'"$(paste -sd'|' file2.txt)"'/s/$/*/' file1.txt
MAC*
MACHINE*
MECHANICS
MOUNT
DISK
DATA*


paste命令从file2创建一个正则表达式:

$ paste -sd'|' file2.txt
MAC|DATA


然后sed命令查找与此正则表达式匹配的文件行,并用星号替换行尾。

-i添加到sed命令以完成任务。



更新您的新输入:

awk -v patt="$(paste -sd'|' file2.txt)" '{
    for (i=1; i<=NF; i++)
       if ($i ~ patt)
           $i = $i "*"
    print
}' file1.txt




MAC* BOOK
MODERN MACHINE*
MECHANICS
MOUNT
DISK
DATA* INFORMATICS


并编辑以将输出保存回文件中:

tmp=$(mktemp)
awk ... file1.txt > "$tmp" && mv "$tmp" file1.txt


或者,使用最新的GNU awk:

gawk -i inplace -v patt="$(paste -sd'|' file2.txt)" '{
    for (i=1; i<=NF; i++)
       if ($i ~ patt)
           $i = $i "*"
    print
}' file1.txt

10-02 01:06
查看更多