我正在尝试使用 sed 删除文本文件中某个单词的所有出现。我有这个文件 f1:
阿尔玛阿法阿
拉特尼亚里皮
罗斯阿尔玛
我想删除所有出现的“alma”。我在 .sh 脚本中使用了以下内容:
a=`sed“s/alma//g”$文件`; echo -e $a | cat > $file
其中$file
包含我之前刚刚编写的文本文件的名称。问题是 sed 没有考虑换行符,我的新 f1 文件如下所示:
上帝保佑我们度过难关。
因此所有内容都写在一行中,但是我想用单独的行保留 f1 的原始形式。
我该怎么做?
答案1
使用 GNU sed
,您可以通过一个命令实现此目的:
sed -i "s/alma//g" f1
-i
就地编辑文件。
对于 BSD sed
,例如在 OS X 上,选项不同:您需要sed -i '' 's/alma//g' f1
。
答案2
您漏掉了引号。
a=$(sed "s/alma//g" $file);
printf %b "$a" > $file
你应始终使用引号围绕参数扩展,除非你知道自己在做什么。
不过,我认为 parkydr 的单行代码更具可读性。