![使用 Bash 替换 ASCII 文件中某一行的第二个字符串实例](https://linux22.com/image/1143239/%E4%BD%BF%E7%94%A8%20Bash%20%E6%9B%BF%E6%8D%A2%20ASCII%20%E6%96%87%E4%BB%B6%E4%B8%AD%E6%9F%90%E4%B8%80%E8%A1%8C%E7%9A%84%E7%AC%AC%E4%BA%8C%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%AE%9E%E4%BE%8B.png)
我有一个具有以下结构的 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