我有一个这样的文本文件:
- directory Test/Movie1
- Quote1 -rw-rw-r-- 63 1 1
- @
- directory Test/Movie2
- Quote2 -rw-rw-r-- 24 2 1
- @
- ...(file goes on)
我想要这样的输出:
- directory Test/Movie1
- Quote1 -rw-rw-r-- 63 1 1
- @
- ...
我已经尝试过这个命令:
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/