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