使用 sed 删除所有单词并保留换行符

使用 sed 删除所有单词并保留换行符

我正在尝试使用 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 的单行代码更具可读性。

相关内容