Awk 找出库的最新版本,只去掉库名
我正在使用tsch创建一个脚本,用于更新给定文件夹中库的链接 我可以使用(例如)获取库的最新版本 这让我Awk 找出库的最新版本,只去掉库名,awk,Awk,我正在使用tsch创建一个脚本,用于更新给定文件夹中库的链接 我可以使用(例如)获取库的最新版本 这让我 libelf.so.1 -> libelf-0.158.so libelf.so.0 -> libelf.so.0.8.13 libelf.so.1 -> libelf-0.158.so 但是我不知道如何只去掉libelf-0.158.so部分的结果。我试着用akw set lib = `ldconfig -v | grep libelf | awk '$1 == "-&
libelf.so.1 -> libelf-0.158.so
libelf.so.0 -> libelf.so.0.8.13
libelf.so.1 -> libelf-0.158.so
但是我不知道如何只去掉libelf-0.158.so部分的结果。我试着用akw
set lib = `ldconfig -v | grep libelf | awk '$1 == "-> " {gsub(/\/.*$/, "", $2); print $2}'`
但是没有得到任何结果
我还想把它插入到一个循环中,搜索给定文件夹中的所有库链接,因为我事先不知道该文件夹有哪些库链接,我不想写每个链接,比如
if ( -f libelf.so.1 ) ln -fs /usr/lib64/libelf-0.158.so libelf.so.1
if ( -f libreadline.so.1 ) ln -fs /lib64/libreadline.so.6.3 libreadline.so.1
if ( -f libXv.so.1 ) ln -fs /usr/lib64/libXv.so.1.0.0 libXv.so.1
根据您发布的内容,您需要的是:
ldconfig -v | awk '/libelf/{print $3}'
请注意,当您已经在使用awk时,您永远不需要grep(或sed),因为awk可以做任何有用的事情。问题的第二部分没有答案。您可以使用以下内容:
# ldconfig -p | awk -v dir="." '/libelf/{ \
printf("if (-f %s/%s) ln -fs %s %s/%s\n",\
dir, $1, $4, dir, $1 \
)}'
其结果是:
if (-f ./libelf.so.1) ln -fs /lib64/libelf.so.1 ./libelf.so.1
if (-f ./libelf.so.1) ln -fs /lib/libelf.so.1 ./libelf.so.1
一些评论:
- 您可以通过管道将awk命令传输到对
的调用中,但是由于您使用的是uniq
,因此没有问题ln-f
- 使用
可以设置要在其中创建链接的目录-v dir=
- 我建议使用
,因为ldconfig-p
可能会显示一些错误,您需要在awk脚本中过滤掉这些错误-v
awk'$2==“->”{print$3}'
?我正在使用tsch,我正在尝试创建脚本
-不要这样做。当像libelf.so.1->libelf-0.158.so这样的任何输入行中都没有/
时,您想用gsub(/\/.*$/,“”,$2)
做什么?为什么要在awk脚本中测试->
,而每个输入行都包含该脚本?不客气,请参阅下一步的操作。
if (-f ./libelf.so.1) ln -fs /lib64/libelf.so.1 ./libelf.so.1
if (-f ./libelf.so.1) ln -fs /lib/libelf.so.1 ./libelf.so.1