パターンを含む文字列を置き換えるためにsedを使用したいと思います。

パターンを含む文字列を置き換えるためにsedを使用したいと思います。

というファイルには次の行がありますref.list

234      ./XYZ_SiteMetric_TIMESTAMP.dat

456      ./XYZ_Site_TIMESTAMP.dat

私はそれらを作らなければなりません:

234      SiteMetric

456      Site

私のスクリプトは次のコマンドを使用します。

sed -i 's/\*SiteMetric\*/SiteMetric/g' ref.list

sed -i 's/\*Site\*/Site/g' ref.list

リストファイルには同様の行がたくさんあります。

を使用してスクリプトを実行するとsh -xエラーはなく、コマンドが実行されます。ただし、ファイルには何も変更されません。

注:XYZ_2行の部品は常に同じです。しかし、timestamp部品は異なります。

答え1

任意数の文字の構文はです.**前の文字または式に一致する数だけを示します。つまり、.*表示されている一致の数に関係なく、.すべての文字と一致することができます。

答え2

短い解決策はどうですか?

sed -ri -e 's%[.]/XYZ_(.*)_TIMESTAMP.dat%\1%' ref.list

すべての入力がこのパターンに従うとします。

答え3

Site / SiteMetricに文字がなく_(変数かどうかわからない)、スキーマが静的であると仮定すると、次のことができます。

sed 's/\.[^_]*_//;s/_.*//;'

最初の部分は部分をs削除し./XYZ_、2番目の部分は部分を削除します_TIMESTAMP.dat

関連情報