Text-Processing
想要使用 Unix 命令編輯文件內容以刪除最後一個下劃線之後和文件副檔名之前的字元串
我想編輯第 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 編寫的,因此是可移植的。