【发布时间】:2017-05-30 04:32:39
【问题描述】:
我只想在其他两个变量匹配时替换一个变量。例如,我的 data.txt 中有这个:
Mary Jane:Runs:Pasta
Mary Jane:Kicks:Apricot
John:Runs:Pasta
我只想在与这两个值匹配的行上替换一个变量。假设我希望第一个变量匹配“Mary Jane”,第二个变量匹配“Runs”,然后将该特定行从“Runs”更改为“Sleep”,结果应该是这样的:
Mary Jane:Sleeps:Pasta
Mary Jane:Kicks:Apricot
John:Runs:Pasta
但我得到了这个:
Mary Jane:Sleeps:Pasta
Mary Jane:Kicks:Apricot
John:Sleeps:Pasta
【问题讨论】:
-
听起来你只是在要求
sed 's/Mary Jane:Runs/Mary Jane:Sleeps/。但肯定不止这些,不是吗? -
是的,我认为您的回答会更相关,因为我正在考虑类似
sed "s/$VAR1:$VAR2/$VAR1:$NEW_VAR/"的内容。谢谢! -
当需求更改为
first field is A and either 13th field is B or 27th field is C之类的东西时,尝试在sed 's/Mary Jane:Runs/Mary Jane:Sleeps/方法上构建会变得很丑陋,而在 awk 中它通常会是$1=="A" && ($13=="B" || $27=="C")并且如果您想添加the third occurrence of...for例子然后忘记它。除了单行上的简单替换之外,您应该使用 awk 来获得清晰、简单、可移植、效率、可扩展性和大多数其他理想的软件属性。 -
啊,谢谢 Ed 的解释。我现在对为什么使用 awk 有了更好的理解!