如何在shell脚本中编辑文件的内容?

时间:2012-10-07 05:44:57

标签: shell

除了sed之外还有其他选择吗? 我的意思是在shell脚本

中执行此操作的命令

cat file1,它包含以下内容:

How
are
you

但是假设我想将“如何”改为“谁”?

1 个答案:

答案 0 :(得分:1)

sed有多种替代方案,但sed可能是此特定操作的首选工具。替代方案包括:

  • ed
  • ex
  • 的Perl
  • 的Python
  • 红宝石
  • awk

edex命令类似:

ed ff <<!
g/How/s//Who/g
w
q
!

您可以写ex代替ed

perl -i.bak -p -e 's/\bHow\b/Who/g' ff

awk '{ gsub(/How/, "Who"); print }' ff

我在Python或Ruby方面不够流利,无法提供惯用的解决方案。

但是sed,尤其是带有sed选项的GNU -i,也非常方便:

sed -i 's/How/Who/g' ff

没有-i选项(并且-i选项不完全是白痴,如果你有像我一样的白痴,有符号链接或多个链接到游戏中的单个文件),你可以使用:

sed 's/How/Who/g' ff > ff.$$
cp ff.$$ ff
rm -f ff.$$

或者,使用陷阱来确保没有剩余的临时文件:

tmp=ff.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed 's/How/Who/g' ff > ff.$$
cp ff.$$ ff
rm -f ff.$$
trap 0