我想编辑第二行第二列中的文件内容,这是一个文件名,我想删除最后一个下划线之后和文件扩展名之前的部分。
文件的内容如下所示 输入文件内容
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 编写的,因此是可移植的。
答案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
所有相关文件。