1

私の実行可能ファイルのこの 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}'

これにより、「=>」記号の後のすべての部分文字列が得られます。

次に、もう 1 つの手順を試しました。

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

どちらも機能しません...

4

3 に答える 3

0

これはここで機能します(Windowsの下でGnuSedなので、引用符を変更する必要があります)

sed "s/ .* \(.*\) .*/\1/" test.txt
于 2013-07-08T09:20:15.050 に答える