小编Cap*_*hab的帖子

逃脱美元符号为sed的regexp

我会在实际询问之前介绍我的问题 - 随意跳过本节!

关于我的设置的一些背景信息

要在软件系统中手动更新文件,我正在创建一个bash脚本,使用diff删除新版本中不存在的所有文件:

for i in $(diff -r old new 2>/dev/null | grep "Only in old" | cut -d "/" -f 3- | sed "s/: /\//g"); do echo "rm -f $i" >> REMOVEOLDFILES.sh; done
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,显然我的文件通常在文件名中有一个美元符号($),这是由于GWT框架的一些排列.以下是上面创建的bash脚本中的一个示例行:

rm -f var/lib/tomcat7/webapps/ROOT/WEB-INF/classes/ExampleFile$3$1$1$1$2$1$1.class
Run Code Online (Sandbox Code Playgroud)

执行此脚本不会删除所需文件,因为bash将这些文件作为参数变量读取.因此,我必须用"\ $"来逃避美元符号.

我的实际问题

我现在想在上述管道中添加一个sed-Command,替换这个美元符号.事实上,sed还将美元符号作为正则表达式的特殊字符读取,因此显然我也必须将其转义.但不知怎的,这不起作用,我在google搜索后找不到解释.

以下是我尝试过的一些变化:

echo "Bla$bla" | sed "s/\$/2/g"        # Output: Bla2
echo "Bla$bla" | sed 's/$$/2/g'        # Output: Bla
echo "Bla$bla" | sed 's/\\$/2/g'       # Output: Bla
echo "Bla$bla" | sed 's/@"\$"/2/g'     # Output: Bla
echo "Bla$bla" | …
Run Code Online (Sandbox Code Playgroud)

regex bash shell sed

8
推荐指数
2
解决办法
7654
查看次数

标签 统计

bash ×1

regex ×1

sed ×1

shell ×1