Text-Processing
從文件中的行中刪除最後 n 個字元
我正在使用 Mac 終端 (bash),並且我有一個名為的文件
data_list.txt
,其中包含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_
謝謝你的幫助
如果要刪除最後 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
其他答案已經展示瞭如何刪除下劃線後的所有內容,所以我不會重複。
對於您的確切輸入(所有行的末尾都有空格,最後一行除外),您可以使用它(我想您想擺脫’after _ part’:
sed 's/........ *$//' data_list.txt
為了擺脫最後一個“下劃線”字元之後的任何內容,請使用這個:
sed 's/\(.*_\).*$/\1/' data_list.txt
它也適用於具有多個“下劃線”字元的行,因為 sed 是“貪婪的”。雖然我不知道這是否適用於 MacOS,但至少這對於Google搜尋引擎將登陸這裡的功能 Linux sed 使用者很有用……