sedの正規表現はPCREのようには機能しません。

sedの正規表現はPCREのようには機能しません。

このソースfile.cがあります。

#include <dir/header1>
#include <dir/header2>
#include <dir/header3>
...

私はdirの後のヘッダーだけを一致させたいのです(例header1:)。私はこうする:

$ sed -En 's/\/(.*)>/\1/p' file.c

ただし、次のように出力されます。

#include <dirheader1/なので、行の先頭から一致しますが、文字別にグループ化したいです(したがってs/\/...)。だから私は次のことを試しました。

$ sed -En 's/<.*\/(.*)>/\1/p' file.c

これらのどれも役に立ちません。それでは、それを達成する方法は何ですか?

ベストアンサー1

headerxコマンドを使用して表示された3行のビットのみを抽出するには、次の手順を実行する必要があります。s///sed削除する不要なラインのすべてのビット。

不要な行のビットは、先頭の#include <dir/最初の文字列と>最後の最後の文字列です。これはすべて正規表現と一致する必要があります。次に、キャプチャグループを使用して、初期文字列と最終文字列の間のビットを置き換えます。ワイヤーキャプチャされた文字列として:

sed -n 's,.*/\(.*\)>,\1,p' file.c

またはより具体的に言えば、

sed -n 's,^#include <dir/\(.*\)>,\1,p' file.c

おすすめ記事