Text-Processing

從文件中的行中刪除最後 n 個字元

  • October 24, 2021

我正在使用 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 使用者很有用……

引用自:https://unix.stackexchange.com/questions/674338