【发布时间】:2017-08-06 04:41:00
【问题描述】:
我的文件包含两行带有 Unicode(可能)字符的行:
▒▒▒▒=
▒▒▒=
我希望从文件中删除这两行。
我搜索了一下,发现可以使用这个命令来删除非 UTF-8 字符:
iconv -c -f utf-8 -t ascii file
但它会像这样留下这两行:
=
=
我找不到如何删除匹配(不仅包含,而是匹配)某些短语的行,在我的例子中:=。
更新:我发现当我将“=”行重定向到其他文件并打开文件时,它包含不需要的行:^A= 我无法匹配 sed 删除它。
【问题讨论】:
-
grep -v '^whatever$' file将删除 AREwhatever的行。这就是你要找的全部吗?如果没有,请编辑您的问题以澄清。 -
可能会使用
grep -vFx(反向匹配,固定字符串并匹配整行),然后从模式中移除锚点。 -
@EdMorton 使用
grep强制用户创建一个新文件。使用sed允许用户在不复制-cleared- 文件的情况下“就地”替换。那么sed不是更好吗? -
取决于您对
better的标准是什么。只有一些 seds 允许“就地”编辑,并且那些在不同的操作系统上有不同的参数这样做,因此功能不可移植。我怀疑 grep 会比 sed 快,因为这是它设计的操作。 sed 并没有真正进行“就地”编辑,它只是在内部创建临时文件,所以你真正能说的是sed -i '.bk' '/^whatever$/d' file比grep -v '^whatever$' file > tmp && mv tmp file更简短一点。所以 sed “更好” - idk。 -
@Ed Morton - “grep -v” 类型的命令不适用于在“vim”中打开文件时显示的特殊字符。当我将该命令的输出重定向到一个新文件并使用 vim 打开时,我看到行:^A= - 当我匹配“A=”时,它什么也没找到。