我的sed script有问题。我使用上面的脚本处理this数据。
问题在于,来自脚本的行:
/^$/d
s/ $/ajes/g
不起作用。当然,如果我再次处理数据,它将会起作用。
这不起作用:
sed -f script.sed -i data.file
但这可行(双重处理):
sed -f script.sed -i data.file
sed -f script.sed -i data.file
为什么?哪里有问题?为什么我不能用所有结果处理它一次?
答案 0 :(得分:2)
真正的问题是你只有一行。并且sed
读取它一次并尝试逐个执行每个命令,而整行在模式空间中。当您将某些内容替换为\n
时,它仍然只是一个字符串,它位于模式空间中。它没有分成多个字符串并逐个重读。
显然/^$/
与\n\n
不匹配,而s/ $/ajes/g
与\n
之前的任何空格都不匹配。这就是为什么它不能按照你期望的方式工作的原因。
您可以通过将“非工作”命令修改为
来解决问题s/\n\+/\n/g # equals to /^$/d
s/ \n/ajes\n/g # equals to s/ $/ajes/g
答案 1 :(得分:1)
那里你有很多替换。让我们说你有替换
所以,这里的问题是如果规则A 最初不匹配,然后规则B或C匹配导致在替换后再次与A匹配的模式,则规则A不会进入对那条线的影响。因此,您需要分析替换处理的顺序,并希望您能够找到错误。
希望这能帮助你朝着正确的方向前进。