想要使用 Unix 命令编辑文件内容以删除最后一个下划线之后和文件扩展名之前的字符串

想要使用 Unix 命令编辑文件内容以删除最后一个下划线之后和文件扩展名之前的字符串

我想编辑第二行第二列中的文件内容,这是一个文件名,我想删除最后一个下划线之后和文件扩展名之前的部分。

文件的内容如下所示 输入文件内容

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

答案1

使用正则表达式更改文件内容;

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

问题改变之前的旧答案;使用正则表达式更改文件名;

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

它是用 perl 编写的,因此是可移植的。

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

答案2

尝试

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所有相关文件。

相关内容