sed / awkは一致後に特定の場所の文字を削除します。

sed / awkは一致後に特定の場所の文字を削除します。

私はawkまたはsedソリューションを探しています。私は天才でもありません。私はこの記事を書き始めたときに出てきたすべての提案を読んだ。

データ行を含むファイルがあります。

name
 thisdate=Sep  2 23:59:59 2022 GMT
name
 thisdate=Sep 15 23:59:59 2022 GMT

名前と日付/時刻の両方が異なります。日付番号は常に同じ位置にあり、常に同じ文字数を占めます(2)。時/分/秒は常に行の上の同じ位置にあります。すべての行がthisdate常に将来の日付ではなく、空行もありません。

閉じようとし、この日付行から時間を削除しようとします thisdate=(先行スペースthisdate)。次に、位置18〜26の文字を削除します(正しく計算された場合)。

私はいくつか試しましたが、主に正しい方向を示すために私のニーズに合ったものを探しています。

  952  sed 's/^\(.\{18\}\)\(.\{26\}\)/\1/' file  <--this may not have worked as I didn't key on a match?
  958  sed -i 's/thisdate=(.{11})18/\26/' file
  959  sed -i 's/thisdate=(.{10})17/\25/' file

私は何かを見逃していると確信していますが、誰もが正しい方向に私を指すことができれば幸いです!

ベストアンサー1

6文字目以降の9文字を削除するだけで十分です thisdate=

sed 's/^\( thisdate=.\{6\}\).\{9\}/\1/' file

与えられたデータに対して以下が生成される。

name
 thisdate=Sep  2 2022 GMT
name
 thisdate=Sep 15 2022 GMT

おすすめ記事