Text-Processing

想要使用 Unix 命令編輯文件內容以刪除最後一個下劃線之後和文件副檔名之前的字元串

  • December 7, 2018

我想編輯第 2 行和第 2 列中的文件內容,這是一個文件名,我想從中刪除最後一個下劃線之後和文件副檔名之前的部分。

文件內容如下所示 輸入文件內容

No|filename|count
01 |com_101_00000_0001_a234.txt|100

結果文件內容

No|filename|count  
01 |com_101_00000_0001.txt|100

下劃線的數量可能因 .ctl 文件中存在的文件名而異。像這樣的文件夾中有多個文件,我想類似地更改第二行中所有 .ctl 文件的內容。

Operating system details Linux  2.6.32 -696.30.1.e16
GNU/linux

嘗試

awk -F\| -vOFS=\| 'NR==2 {sub (/_[^_]*\./,".", $2)}1' file
No|filename|count
01 |com_101_00000_0001.txt|100


NR==2       if record count is 2 (i.e. 2. line)
sub (       `awk` "substitute" function
/_[^_]*\./  regex: match string consisting of multiple non-underscores, delimited by leading underscore and trailing literal dot
,".",       with a literal dot
$2)        in second field
1           do default action: print

如果需要,重定向>到臨時文件和mv/cp返回原始文件。對於多個文件,for循環執行所有相關文件。

使用正則表達式更改文件的內容;

perl -pi -e 's/_[^_\.]+(\.)/$1/g' *

問題改變之前的舊答案;使用正則表達式更改文件名;

rename 's/_[^_\.]+(\.)/$1/g' *

它是用 perl 編寫的,因此是可移植的。

http://man7.org/linux/man-pages/man1/rename.1.html

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