我目前正在尝试在我的机器上安装GCC-4.1.2:Fedora 20。
在指令中,前三个命令涉及使用'sed'命令,用于Makefile修改。但是,我很难在我的案例中正确使用这些命令。 GCC-4.1.2的网站link。
命令是:
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in &&
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in &&
sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in &&
我试图通过阅读'sed'手册页来理解它们,但这样做并不容易。任何帮助/提示将不胜感激!
答案 0 :(得分:6)
首先,shell部分:&&
。这只是将命令链接在一起,因此每个后续行只有在前一个行成功运行时才会运行。
sed -i
表示"在文件"上内联运行这些命令,即直接修改文件而不是将更改的内容打印到STDOUT。这里的每个sed命令(字符串)都是替换命令,我们可以告诉它,因为命令以s
开头。
替换在文件中查找一段文本,然后替换它。所以订单总是s/needle/replacement/
。看看第一行和最后一行是如何具有相同的正斜杠的?这是命令(替代),在大海捞针(install_to_$(INSTALL_DEST)
中找到的针以及用()替换它的文本之间的传统分隔符。
所以,第一个查找字符串,删除它(空替换)。最后一个查找@have_mktemp_command@
并将其替换为yes
。
中间的有点奇怪。了解它如何从s@
而不是s/
开始?好吧,sed会让你使用你喜欢的任何分隔符将针头与替换品分开。由于此针中有/
(\./fixinc\.sh
),因此使用与/
不同的分隔符是有意义的。它会将文字./fixinc.sh
替换为-c true
。
最后一点:为什么第二针有\.
而不是.
?好吧,在正则表达式中就像针一样(但在你的例子中没有使用),一些角色是魔法并做魔法仙尘操作。其中一个神奇的角色是.
。为了避免魔法,我们在它前面放了\
,远离魔法。 (魔术是"匹配任何角色",我们想要一个字面时间。这就是原因。)