使用SED替换#(Hash)随附的文件名



i在混合#

的替换文件名时面临一些问题
Ex:- #test#123

我已经维护了像report.csv这样的报告文件,我使用bash脚本来汇总我的报告。默认情况下,我的report.csv文件随附所有扩展类型作为默认模板。

在我的report.csv中 date-copy copy_status no_txt no_err no_sql如果我的副本成功,我将使用copy_status的sed替换为copy_success如果它的正常文件(/home/user/text123.txt(被复制,我没有替换路径的问题

sed 1s#NO_TXT#/home/user/text123.txt# -i report.csv

之后,我的CSV文件将看起来 date-copy copy_success/home/user/text123.txt no_err no_sql

如果我有#hashmixed文件示例

   sed 1s#NO_TXT#/home/user/#text#123.txt# -i report.csv

我会像以下错误一样,无法用完整路径替换哈希文件

    sed: -e expression #1, char 44: unknown option to `s'

sed可以为其分离器使用许多字符。最常用的是/,但是对于文件而言,使用其他字符(例如#(很方便。在您的情况下,最简单的方法是使用其他分离器,例如|,但请确保您引用SED字符串:

sed '1s|NO_TXT|/home/user/#text#123.txt|' -i report.csv

,或者如果您要通过变量,请使用双引号:

sed "1s|NO_TXT|/home/user/$file|" -i report.csv

最新更新