
というファイルには次の行があります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
。