在Ubuntu Linux中如何在文件中搜索和替换内容?

4

我的平台:Ubuntu Linux工作站

在一个目录中,我有一系列文件,文件名为xxx_1.in到xxx_50.in

对于每个文件,我想将abc替换为def。如果我逐个进行操作,我应该输入:g/abc/s//def/g

如何编写脚本来一次性处理所有文件?


我修改了一些语法错误并澄清了标题。 - cdeszaq
你是在文件内容中替换 abcdef,还是在文件名中替换?我两个都会做。 - Blender
2个回答

7
sed -i 's/abc/def/g' xxx_*.in

应该足够了


0

我喜欢Python,即使是用于shell脚本编程。我真的不太懂如何使用sed,所以我坚持使用Python的搜索和替换功能:

#!/usr/bin/env python
import os, glob

for filename in glob('xxx_*.in'):
  os.rename(filename , filename .replace('abc', 'def'))

因此,作为一个内嵌脚本,当您将其复制/粘贴到终端时运行(由于我当前的计算机上没有Python,所以不保证可行性),

python -c "import os, glob; eval('for f in glob(\'xxx_*.in\'):\n  os.rename(filename , filename .replace(\'abc\', \'def\'))'"

看起来你指的是文件的内容那个我可以不用Python做到(希望这行得通):

for f in xxx_*.in; do sed s/abc/def/g "$f"; done

请确保引用文件名变量,例如 "$f" - rlibby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接