使用 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 解释的字符,如 \
、/
或 &
。有关可靠处理此类情况的详细信息,请参阅 。
我想要一些关于这个脚本的建议。
我正在尝试使用 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 解释的字符,如 \
、/
或 &
。有关可靠处理此类情况的详细信息,请参阅