linux - Bash - 从一种模式替换为另一种模式以及介于两者之间的所有内容

标签 linux bash awk sed

我有一个这样的文本文件:

  1. directory Test/Movie1
  2. Quote1 -rw-rw-r-- 63 1 1
  3. @
  4. directory Test/Movie2
  5. Quote2 -rw-rw-r-- 24 2 1
  6. @
  7. ...(file goes on)

我想要这样的输出:

  1. directory Test/Movie1
  2. Quote1 -rw-rw-r-- 63 1 1
  3. @
  4. ...

我已经尝试过这个命令:

sed '0,/'"Test\/Quote1"'/d;/@/,$d' header.txt

但它没有给我想要的输出。 谢谢你的帮助

编辑:

我正在尝试重新创建一些 shell 命令来格式化文件“header.txt” 如果我输入

rm Test/Movie2

我的脚本是这样的:

while read -a line
do
 if [[ "${line[0]}" == "rm" ]]; then
  sed -i "/${line[1]}/"'s/.*//' header.txt #replacing Test/Movie2 by blank line

done

现在,我想用空行替换“目录 Test/Movie2”下的所有内容,直到下一个分隔符“@”

最佳答案

根据您的 sed 表达式,我认为您想要使用的是:

sed '/Test\/Movie2/,/@/d;' header.txt

换句话说:从模式 Test/Movie2 中删除到后面的 @(包括在内)。它提供您想要的输出。

编辑:上面的命令将完全删除模式之间的线条。

这是另一个命令行,它会将它们替换为空行:

sed '/Test\/Movie2/,/@/g;' header.txt

(我们加载并打印 sed 保留空间的内容,而不是使用 d 命令删除模式并且不打印任何内容。)

关于linux - Bash - 从一种模式替换为另一种模式以及介于两者之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106713/

相关文章:

用于连接到远程服务器并计算文件数量的python脚本

linux - 使用 AWK 命令提取结果

linux - ls 中的新行格式

使用 virtualbox 删除和创建快照的 Bash 脚本

unix - AWK。提取根和后缀

variables - AWK——如何从稍后出现的匹配正则表达式中分配变量的值?

xml - 如何比较 10 个大的 XML 文件?

linux - 如何使 dlerror() 报告来自 dlopen() 加载共享库失败的 *所有* 未解析符号?

linux - 如何在 linux 中运行 c#4.0(visual studio 2010) windows 桌面应用程序?

linux - 删除列 csv 文件,其中一些包含引号文本(包括逗号)