使用Linux命令

时间:2015-06-22 08:14:18

标签: linux shell sed grep pattern-matching

我知道如何使用模式匹配文本,但不知道如何操作它们。

我使用来匹配和提取文本文件中的行,但我想从文本中删除这些行。如何在不编写 shell脚本的情况下实现此目的?

我在Google上搜索过,建议使用,但我是新手,不知道它是如何运作的。

有人能指出我正确的方向还是帮我实现这个目标?

2 个答案:

答案 0 :(得分:2)

-v的{​​{1}}选项会反转搜索,仅报告与该模式不匹配的行。

由于您知道如何使用grep查找要删除的行,因此使用grep相同的模式将为您提供所有要保留的行。您可以将其写入临时文件,然后将临时文件复制或移动到原始文件上。

grep -v

您也可以使用grep -v pattern original.file > tmp.file mv tmp.file original.file ,如shellfish' answer所示。

sed解决方案有多种可能的改进,但对于大多数人来说,显示的内容或多或少是足够的(使用每进程中间文件名是个好主意,最好用随机名称,例如grep命令给你。您可以添加代码以删除中断上的中间文件;向后移动时抑制中断;如果原始文件有多个硬链接或是符号链接,请使用复制和删除而不是移动;等mktemp命令或多或少地为你解决了这些问题,但它没有认识到多个硬链接或符号链接。

答案 1 :(得分:1)

使用创建与线匹配的模式。然后按如下方式创建脚本:

sed -i '/pattern/d' file

说明:

  • -i选项表示覆盖输入文件,从而删除与pattern匹配的文件。
  • pattern是您为grep创建的模式,例如^a*b\+
  • d此sed命令代表删除,它将删除与模式匹配的行。
  • file这是输入文件,它可以包含相对路径或绝对路径。

有关详细信息,请参阅man sed