ファイル行から最後のn文字を削除する

ファイル行から最後のn文字を削除する

data_list.txt私はMac端末(bash)を使用しており、次の行を含むファイルがありますn

aaabbbccc_7777.txt 
nnhhaa_8888.txt 
ayquabay_9999.txt 
ayqynbnbn_1122.txt 
ooppaa_3454.txt

各行の最後の8文字をどのように削除しますか?

期待される出力data_list.txt:

aaabbbccc_ 
nnhhaa_ 
ayquabay_ 
ayqynbnbn_ 
ooppaa_

ご協力ありがとうございます

ベストアンサー1

最後の8文字を削除するか、8文字未満の場合はすべて削除するには、次のようにします。

sed "s/.\{0,8\}$//; /^$/d" data_list.txt

正規表現を拡張する必要はありません。これにより、できるだけ多くの文字が消去されますが、8文字以下です。空の行が残っている場合は、出力から削除されます。

末尾のスペースを削除する必要がある場合(8文字以内には含まれません)、次のことができます。

sed "s/.\{0,8\}[[:space:]]*$//" data_list.txt

最後に削除する必要がある実際の基準が何であるかを推測できます(たとえば、下線の後のすべての項目または数字+拡張子)。ただし、ファイル拡張子とその前の数字を削除したい場合:

sed "s/[[:digit:]]*\..*$//" data_list.txt

他の答えは、すでに下線の後のすべての項目を削除する方法を示しているので、繰り返しません。

おすすめ記事