shell sed -从变量替换精确字符串不起作用[已关闭]

jum4pzuy  于 2023-03-19  发布在  Shell
关注(0)|答案(1)|浏览(118)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
我想在一个文件中的特定行的开头添加“no”,方法是在另一个文件中循环,如下所示:

while read -r line;
do
sed -i "s/^$line/no $line/g" "${Temp_conf}" 
done < temp_file #file with list of strings I want to find in $Temp_conf

脚本在一个字符串方面存在问题:switchport port-security maximum 2。它还向switchport port-security maximum 10添加了“no”,但这对于我的任务来说是不可接受的。我尝试使用\< \> \b修改sed中的搜索,尝试不同的分隔符|,但它们都没有做任何更改

gr8qqesn

gr8qqesn1#

使用awk,你可以在概念上做类似的事情。需要根据你的需求和测试进行改进。

awk 'NR == FNR { ++a[$0]; next } a[$1] { $0 = "no " $0 } 1' temp_file "$Temp_conf" | sponge "$Temp_conf"

除了使用sponge,你也可以将每一行存储在另一个数组中,然后使用for循环在END中打印该数组,其中重定向的输出接收器是FILENAME,但你必须小心排序。阅读一些awk手册或查找示例。
你也可以使用gawk的inplace模式,但这有点棘手,因为你必须在第一个文件中禁用它,然后通过控制一些参数的值在第二个文件中启用它。

相关问题