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

标签 linux bash shell 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 命令,所以也许我做错了我没有意识到的事情。

PS:我看过那些帖子,但没有答案对我有用:

https://unix.stackexchange.com/questions/157076/how-to-remove-the-apostrophe-and-delete-the-space

How to replace to apostrophe ' inside a file using SED

最佳答案

这可能会:

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 等于双引号 "

关于linux - 如何用sed正确检测和替换撇号(')?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58263040/

相关文章:

linux - NASM:如何使用英特尔 64 位程序集创建/处理基本 bmp 文件?

java - 关于JAVA和Linux的一些基本概念 : PATH variable in LINUX and class location by JVM

linux - 创建路径名来检查文件不存在/权限被拒绝错误

bash - ffmpeg bash脚本文件名变量中的空格

mysql - 精确时间之间的查询

shell - 在 awk 中按名称搜索列

linux - 在 centOS 上,大量 float 的字符串流序列化比序列化 block 的 4 个 pthread-ts 更快。 std::threads 在 Windows 上更快

linux - 在 Ubuntu 下启动/停止 .NET Core 应用程序

shell - 除了原始模式之外,还有其他方法可以处理 Rust 中的箭头键输入吗?

c - argc 在 C 程序中给出错误的值