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