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