linux shell sed命令的问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell sed命令的问题!相关的知识,希望对你有一定的参考价值。
在做LFS调整工具链时,有这样的代码:
gcc -dumpspecs | sed \ #输出的只是一个文本文件,(file的判断如此)
-e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \ #只有一处有/lib/ld-linux.so.2,只改了一处
-e '/\*startfile_prefix_spec:/n;s@.*@/usr/lib/ @' \
-e '/\*cpp:/n;s@$@ -isystem /usr/include@' > \
`dirname $(gcc --print-libgcc-file-name)`/specs #通过实验,gcc --print-libgcc-file-name输出的是/usr/lib/gcc/i686-linux-gnu/4.6.1/libgcc.a 这样的文件名。
上面的注释是我加的,我查了资料,只能明白这些了,具体的问题是@代表什么?第二句和第三句的意思,最后一句是把内容输出到哪里?
还有,在运行时出现这样的问题,不知是不是输入有误,出现以下输出:
见图
gcc一句不管,是重复操作的问题,主要是最后一句。(中间把startfile打成atartfile了,但这不是关键问题。)
-e:是用sed的时候可以使用多个替换;
-e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g'
意思:把/tools/lib/ld-linux.so.2全部替换成/lib/ld-linux.so.2
sed命令的格式:
sed -e 's/字符串1/字符串2/g' -e 's/字符串3/字符串4/g'
s:是替换字符串;
g:是全局替换;
下边的两句,不是很明白。
这是编译包到时候出现到吗,要是没有明显报错,就没事。 参考技术A @是使用sed命令的分隔符,可以用“:”、“/”、“-”等很多,这里是用的“@”。
-e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g'
意思:把/tools/lib/ld-linux.so.2全部替换成/lib/ld-linux.so.2
-e '/\*startfile_prefix_spec:/n;s@.*@/usr/lib/ @' \
意思:首先找出所有包含*startfile....的行,然后将查到的所有行都替换成/usr/lib
n;s@.*@/usr/lib/ @表示 对/\*startfile_prefix_spec:/进行操作n;s@.*@/usr/lib/ @。
n;s@.*@/usr/lib/ @就是循环替换的意思
-e '/\*cpp:/n;s@$@ -isystem /usr/include@' > \
同上面意思一致
不知道我表述的明不明白,如果不明白可以发信息给我。本回答被提问者采纳 参考技术B 打酱油一记,帮lz顶下。
以上是关于linux shell sed命令的问题!的主要内容,如果未能解决你的问题,请参考以下文章