在正则表达式中,反斜杠后跟严重重音是什么意思?

时间:2015-10-21 06:05:06

标签: regex

我在正则表达式中找到了以下内容:

s/.*\`\(.*\)'/\1/g

我想知道重音的含义是什么。我对正则表达式只有一个非常基本的理解,所以我试着查一下,但基本的搜索并没有引导我做任何有用的事情。

上下文:我正在尝试接受此问题的答案:An error building Qt libraries for the raspberry pi

它建议运行以下脚本来调整simlinks:

find . -maxdepth 1 -type l | while read i;
do qualifies=$(file $i | sed -e "s/.*\`\(.*\)'/\1/g" | grep ^/lib)
if [ -n "$qualifies" ]; then
newPath=$(file $i | sed -e "s/.*\`\(.*\)'/\1/g" | sed -e "s,\`,,g" | sed -e "s,',,g" | sed -e "s,^/lib,$2/lib,g");
echo $i
echo $newPath;
sudo rm $i;
sudo ln -s $newPath $i;
fi
done

然而,它没有做任何事情,所以我试图了解它应该如何运作。

find找到了很多文件,例如:

./libcap-ng.so.0
./libnettle.so.4
./libSDL-1.2.so.0
./libwebpmux.so.1
./libnss_nisplus.so
./libavahi-gobject.so.0
./libgdk-3.so.0
./librsvg-2.so.2
./libatk-bridge-2.0.so.0
./libgeoclue.so.0
./libdv.so.4
./libcdda_interface.so.0
./libheimbase.so.1
./libfontconfig.so.1
./libXinerama.so.1
./libopenal.so.1
./libicule.so.52 
./libaudio.so.2
./libmplex2-2.1.so.0

等等几十个其他文件,但似乎没有一个"资格"为正则表达式。

1 个答案:

答案 0 :(得分:4)

在Bash中,双引号字符串"..."允许各种扩展,包括使用$(...)`...`命令替换。例如,这个:

cat "fo`echo ob`ar"

相当于cat foobar,因为`echo ob`表示“运行命令echo ob并在此处输出其输出”。

因此,如果要在双引号字符串中包含实际`,则必须使用反斜杠引用它。这就是你的脚本正在做的事情。例如,sed -e "s,\`,,g"仅表示sed -e 's,`,,g',即“删除所有`”。 (请注意,`并不意味着sed本身有任何特殊之处;它只与输入中的`匹配。同一命令可以写为tr -d '`'。)