我有一个目录,其中包含许多具有特殊字符和空格的文件。我想对所有这些文件执行操作,所以我尝试将所有文件名存储在 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
最佳答案
这可能会:
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/