我有一个具有以下结构的 ASCII 文件:
file1.png otherfile1.png
file2.png otherfile2.png
file3.png otherfile3.png
...
我想.png
用替换.mat
,但只针对第二列。结果应该是这样的:
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
...
我如何在 Bash 中做到这一点?
答案1
好吧,如果这就是终点的话……
$ sed 's/\.png$/.mat/' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
s/old/new/
搜索和替换\.
文字点(不带转义符,可匹配任何字符)$
行结束
或者要明确指定第二列,您可以使用一种awk
方法......
$ awk 'gsub(".png", ".mat", $2)' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
gsub(old, new, where)
搜索和替换$2
第二列
答案2
你可以.png
直接替换所有字符串在行末像INPUTFILE
这样:
sed 's/\.png$/.mat/' INPUTFILE
上面的命令不会修改INPUTFILE
,只会将改变的版本打印到终端。
要直接在现场编辑文件,请添加标志-i
(sed
或-i.bak
存储原始文件的备份):
sed -i 's/\.png$/.mat/' INPUTFILE