使用 Bash 替换 ASCII 文件中某一行的第二个字符串实例

使用 Bash 替换 ASCII 文件中某一行的第二个字符串实例

我有一个具有以下结构的 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,只会将改变的版本打印到终端。

要直接在现场编辑文件,请添加标志-ised-i.bak存储原始文件的备份):

sed -i 's/\.png$/.mat/' INPUTFILE

相关内容