我在替换与#
混合的文件名时面临一些问题Ex:- #test#123
我维护报告文件,如report.csv,我使用bash脚本汇总我的报告。 默认情况下,我的report.csv文件附带所有扩展类型作为默认模板。
在我的report.csv中 DATE-COPY COPY_STATUS NO_TXT NO_ERR NO_SQL 如果我的副本成功,我将使用sed从COPY_STATUS替换为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'
答案 0 :(得分:1)
Sed可以为其分隔符使用多个字符。最常用的是/
,但对于文件来说,使用#
之类的其他字符非常方便。在您的实例中,最简单的方法是使用另一个分隔符,例如|
,但请确保引用您的sed字符串:
sed '1s|NO_TXT|/home/user/#text#123.txt|' -i report.csv
或者如果您传入变量,请使用双引号:
sed "1s|NO_TXT|/home/user/$file|" -i report.csv