考虑我的可执行文件的这个 ldd 输出:
linux-gate.so.1 => (0x003a5000)
libtcmalloc_minimal.so.0 => ./libtcmalloc_minimal.so.0 (0x00710000)
libBIBusTK.so => ./libBIBusTK.so (0x00b68000)
libCCLIDOM.so => ./libCCLIDOM.so (0x00a08000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00357000)
这里我有趣的部分就是每一行中的这个子字符串:
./libtcmalloc_minimal.so.0
./libBIBusTK.so
./libCCLIDOM.so
/usr/lib/libxcb.so.1
因此我使用 awk 来实现这一点,首先我尝试了:
ldd ./BIBusTKServerMain | awk -F "=>" '{print $2}'
这给了我“=>”符号之后的所有子字符串。
然后我又尝试了一步:
ldd ./BIBusTKServerMain | awk -F "=>" '{print $2}' | awk -F "(0x" '{print $1}'
引发错误:
awk: fatal: Unmatched ( or \(: /(0x/
请注意,如果我尝试了这个:
ldd ./BIBusTKServerMain | awk -F "=>" '{print $2}' | awk -F "0x" '{print $1}'
它产生:
./libtcmalloc_minimal.so.0 (
./libBIBusTK.so (
./libCCLIDOM.so (
/usr/lib/libxcb.so.1 (
我原来的 awk 脚本出了什么问题?我也尝试过 sed 替代方案:
sed -n '/=>/,/\(0x/p' lddInfo.txt
也不行...