开发者社区> 问答> 正文

如何正确检测并用sed替换撇号(')?

我的目录中包含许多带有特殊字符和空格的文件。我想对所有这些文件执行操作,因此我试图将所有文件名存储在中list.txt,然后使用此列表运行命令。

我列表中的特殊字符是& []'。

因此,基本上我想用sed有\问题的字符替换每个事件。

例如:filename .txt=> filename\ .txt等...

问题是我在处理撇号时遇到麻烦。

到目前为止,这是我的命令:

ls | sed 's/\ /\\ /g' | sed 's/\&/\\&/g' | sed "s/\'/\\'/g" | sed 's/\[/\\[/g' | sed 's/\]/\\]/g'

起初,我认为字符串命令中的撇号与字符串周围的撇号冲突。因此,我改为使用双引号,但仍然无法正常工作。

我已经尝试了所有这些,但没有任何效果:

sed "s/'/\'/g" (转义撇号)

sed "s/'/'/g" (不转义)

sed "s/'/\'/g" (转义反斜杠)

sed 's/"'"/"'"/g' (双引号单引号)

作为免责声明,我必须说,我是新手sed。我sed今天才执行我的第一条命令,所以也许我正在做一些我没有意识到的错误。

展开
收起
祖安文状元 2020-01-07 13:58:50 659 0
1 条回答
写回答
取消 提交回答
  • 这可以做到:

    cat file
    avbadf
    test&rr
    more [ yes
    this ]
    and'df
    
    
    sed -r 's/(\x27|&|\[|\])/\\\1/g' file
    avbadf
    test\&rr
    more \[ yes
    this \]
    and\'df
    
    

    \x27 等于单引号 ' \x22 等于双引号 "

    2020-01-07 13:59:02
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载