AWK/SED - 为什么我的脚本将无法正常工作两个关键字之间找到子

考虑这个LDD输出为我的可执行文件:AWK/SED - 为什么我的脚本将无法正常工作两个关键字之间找到子

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 

不工作,要么...

回答:

下面的sed应该工作:

ldd ./BIBusTKServerMain | sed 's/^.* => \([^ ]*\) .*$/\1/' 

或者这AWK也能正常工作:

ldd ./BIBusTKServerMain | awk '$3 ~ /^\.?\// {print $3}' 

回答:

为什么不直接试试:

awk '{print $3}' 

不使用它的原因是什么?

ldd ./BIBusTKServerMain | awk '{print $3}' 

,或者您也可以使用:

perl -lne 'print $1 if(/=\> ([^\s]*)\s/)' 

回答:

这个作品在这里(GnuSed windows下这样的行情需要更换)

sed "s/ .* \(.*\) .*/\1/" test.txt 

以上是 AWK/SED - 为什么我的脚本将无法正常工作两个关键字之间找到子 的全部内容, 来源链接: utcz.com/qa/262279.html

回到顶部