我在正则表达式中找到了以下内容:
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
等等几十个其他文件,但似乎没有一个"资格"为正则表达式。
答案 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 '`'
。)