使用sed替换#(Hash)附带的文件名

时间:2018-04-02 17:46:28

标签: bash awk sed grep

我在替换与#

混合的文件名时面临一些问题
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'

1 个答案:

答案 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