使用 sed 更改文件的前缀

Changing the prefix of a file with sed

我想要一些关于这个脚本的建议。
我正在尝试使用 sed(我没有使用 rename 来管理它)来更改包含格式行的文件(我的测试文件名为 sedtest):

COPY W:\Interfaces\Payments\Tameia\Unprocessed\X151008\E*.*

(这不是文件的唯一内容)。

我的目标是用不同的日期替换 151008 日期部分,我试图在 sed 中使用以下方法提出解决方案:

sed -i -e "s/Unprocessed\X.*/Unprocessed\X'BLABLA'/" sedtest

不过好像不行,那行没变,好像是因为\不识别模式一样。我尝试了一些替代分隔符,例如 #,但无济于事。

提前感谢您的任何建议。

你的 sed 命令有几个问题。我建议将其更改为:

sed -r 's/(Unprocessed\X)[0-9]+/BLABLA/' file

因为你的 sed 版本支持 -i 而不需要你添加后缀来创建备份文件,我假设你使用的是 GNU 版本,它也支持带有 [=14 的扩展正则表达式=] 开关。该命令捕获 () 中的部分并将其用于替换 </code>。不要忘记必须转义反斜杠。</p> <p>如果您打算使用 <code>-i,我建议您像 -i.bak 那样使用,这样您的文件会在 file.bak 被覆盖之前进行备份。

您没有显示您正在寻找的确切输出,但我假设您希望该行变为:

COPY W:\Interfaces\Payments\Tameia\Unprocessed\XBLABLA\E*.*

记住 * 是贪心的,所以 .* 会匹配直到行尾的所有内容。这就是我将其更改为 [0-9]+ 的原因,这样只有数字被替换,其余部分保持不变。


正如您提到的在替换中使用变量,您应该使用这样的东西:

sed -r -i.bak "s/(Unprocessed\X)[0-9]+/$var/" file

这假定 $var 可以安全使用,即不包含将被 sed 解释的字符,如 \/&。有关可靠处理此类情况的详细信息,请参阅