ph.lst
次のレコードを含むファイル()があります。次の数字を削除する必要があります.txt
。数字はランダムに生成されるため、常に同じであるとは期待できません。
test_wkly_20200428010453_PD.txt.1589553864|test_wky|05-01-2020 16:07:53|35858
削除したいです.1589553864
。私の出力は次のようになります。
test_wkly_20200428010453_PD.txt|test_wky|05-01-2020 16:07:53|35858
頑張りました
sed -i 's/\.[0-9]$*//' ph.lst
助けてください
答え1
次のsed
コマンドを試してください。
sed -i 's/txt\.[0-9]*/txt/' ph.lst
次の数字の中から希望の数をtxt.
に置き換えますtxt
。
答え2
あなたはコマンドを試したと言いました。
sed -i 's/\.[0-9]$*//' ph.lst
たった一つだけ非常に小さい何かが間違っていた。行の終わりと一致します$
が、その点で一致させようとするわけではありません。代わりに
sed 's/\.[0-9]*//' ph.lst
または、
sed 's/\.[[:digit:]]*//' ph.lst
これにより、各入力行の最初の点(および点)の直後に表示されるすべての数字が削除されます。出力は標準出力に書き込まれるため、新しいファイルにリダイレクトできます。
それでawk
あなたも同じことをするでしょう。
awk -F '|' 'BEGIN { OFS=FS } { sub("\.[[:digit:]]*", "", $1) }; 1' ph.lst
ph.lst
これは区切られたフィールドの行を解析し、|
withと同じ正規表現を使用して部分文字列を削除しますsed
(ここでは最初のフィールドでのみ機能します)。