【发布时间】:2014-10-23 14:22:27
【问题描述】:
我正在尝试找到一种方法,使用变量和 sed 来使用不断变化的输入文件进行特定的文本替换,但前提是有一个值可以替换现有的字符串。没有值 = 什么都不做(而不是删除现有的字符串)。
示例 Substitute.csv 包含 5 行=
this-has-text
this-has-text
this-has-text
this-has-text
而file.text只有一句话=
"When trying this I want to be sure that text-this-has is left alone."
如果我在 shell 脚本中运行以下命令
Text='text-this-has'
Change=`sed -n '3p' substitute.csv`
grep -rl $Text /home/username/file.txt | xargs sed -i "s|$Text|$Change|"
我结束了
"When trying this I want to be sure that is left alone."
但我希望它保持原样
"When trying this I want to be sure that text-this-has is left alone."
有什么方法可以告诉 sed“如果我没有给你任何新的东西,什么都不做”?
对于我想太多的坏习惯,我深表歉意。基本上我想要完成的是 csv 文件的第 3 行是否有值 - 将 $Text 替换为 $Change inline。如果该行为空,则将 $Text 保留为 $Text。
【问题讨论】:
-
在去
sed之前检查$Change是否为空? -
哇,你把这个问题弄得比原来要复杂得多!所有关于从文件中读取第三行并将 greps 通过管道传输到 xargs 的所有内容都完全无关紧要,因此浪费了我们的时间试图理解所有内容并混淆了这个非常简单的问题。