sed 命令删除所有内容并只在模式之间留下单词?

sed 命令删除所有内容并只在模式之间留下单词?

sed命令删除所有内容并仅在模式之间留下单词?

我试过:

$ sudo sed -i '/from/,/until/!d'

但它在第一行下留下了一些单词,并且在模式之间留下了整行而不仅仅是单词。

我有一个充满文本的文件,但我只想在“从”文本“直到”之间保留文本,并删除其他所有内容。

我尝试

for file in `ls`
do
    echo "`awk '/from/,/until/' $file`" > $file
done

我留下了两行,第一行是上面图案中的文本,第一行是空的新行

答案1

听起来您想打印两个模式之间的所有内容,但删除其他所有内容。像这样的东西:

$ echo -e "a\nb\nc\nd\ne" | sed -ne '/b/,/d/p'
b
c
d

你的开始和结束模式在哪里/b/?也/d/可以使用以下方法来完成类似的方法:awk

$ echo -e "a\nb\nc\nd\ne" | awk '/b/,/d/'
b
c
d

图案

在决定使用什么作为开始/结束模式时,您需要确保设计它们尽可能明确。

例如:

$ cat afile
something
something
one
two
some start
start
what
did
you start
done
end
the end

现在选择仅包含/start/后跟单词的行之间出现的行/done/

$ sed -ne '/^start$/,/^done$/p' afile
start
what
did
you start
done

参考

相关内容