gpt4 book ai didi

regex - 像使用 sed 一样替换具有模式的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:21 24 4
gpt4 key购买 nike

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

下面是示例:

cat file1.txt MAC BOOKMODERN MACHINEMECHANICSMOUNTDISKDATA INFORMATICS
cat file2.txt MACDATA
for line in $(cat file2.txt|uniq)do    sed -i "/$line.*/s/$line.*/$line.**/" file1.txtdone

预期输出:

cat file1.txt

MAC* BOOKMODERN MACHINE*MECHANICSMOUNTDISKDATA* INFORMATICS

最佳答案

一行:

$ 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

关于regex - 像使用 sed 一样替换具有模式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com