我正在尝试找到一种从文本中的字符串搜索到另一个字符串的方法。
Lorem ipsum dolor坐 amet ,奉献精神。 Phasellus massa nulla,lobortis坐在amet placerat hendrerit,mollis quis nulla。 Morbi consectetur,odio vel rhoncus euismod,nunc nisi euismod ante,vitae molestie ante nulla non est。
Vivamus eget fermentum lorem,sed suscipit nulla。 Aliquam sucquat ultrices maximus。 Pellentesque居民morbi tristique senectus et netus et malesuada fames ac turpis egestas。
Etiam vitae tortor quis lectus convallis ullamcorper。 Nullam nec dignissim tellus ,vel dictum nisi。 Etiam坐在一个自由自在的东西,自由自在,semper ex。 Cras eu magna fringilla,iaculis sapien id,feugiat lorem。 Ut id velit mauris。
我想知道在命令行中是否有办法提出上段中粗体字之间的内容。 我尝试过不同的grep变种而没有任何成功。
答案 0 :(得分:3)
您可以使用参数替换:
#!/bin/bash
string=$( <dat/lorem.txt )
tmp=${string#*amet}
tmp=${tmp%tellus*}
echo $tmp
<强>输出:强>
$ string=$( <dat/lorem.txt ); tmp=${string#*amet}; tmp=${tmp%tellus*}; echo $tmp
, consectetur adipiscing elit. Phasellus massa nulla, lobortis sit amet placerat hendrerit,
mollis quis nulla. Morbi consectetur, odio vel rhoncus euismod, nunc nisi euismod ante,
vitae molestie ante nulla non est. Vivamus eget fermentum lorem, sed suscipit nulla.
Aliquam consequat ultrices maximus. Pellentesque habitant morbi tristique senectus et
netus et malesuada fames ac turpis egestas. Etiam vitae tortor quis lectus convallis
ullamcorper. Nullam nec dignissim
答案 1 :(得分:2)
通过一个sed命令
sed -n ':a;$!{N;ba};s/.*\(amet.*tellus\).*/\1/p' infile
amet placerat hendrerit, mollis quis nulla. Morbi consectetur, odio vel rhoncus euismod, nunc nisi euismod ante, vitae molestie ante nulla non est.
Vivamus eget fermentum lorem, sed suscipit nulla. Aliquam consequat ultrices maximus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Etiam vitae tortor quis lectus convallis ullamcorper. Nullam nec dignissim tellus
如果您不需要输出中的关键字:
sed -n ':a;$!{N;ba};s/.*amet\(.*\)tellus.*/\1/p' infile
placerat hendrerit, mollis quis nulla. Morbi consectetur, odio vel rhoncus euismod, nunc nisi euismod ante, vitae molestie ante nulla non est.
Vivamus eget fermentum lorem, sed suscipit nulla. Aliquam consequat ultrices maximus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Etiam vitae tortor quis lectus convallis ullamcorper. Nullam nec dignissim
答案 2 :(得分:1)
您可以使用正则表达式
grep -e 'amet .* tellus' yourfile
.
匹配除换行符之外的任何字符,而*
表示0次或更多次。
答案 3 :(得分:1)
将sed用于此:
sed -n '/amet/,/tellus/p' atext.txt | sed 's/.*amet/amet/;s/tellus.*/tellus/'
输出应如下所示:
amet ...(everything in between)...tellus
第一个sed删除除了包含单词amet和tellus以及其间的所有行之外的所有行。
第二个sed删除amet之前的所有单词,以及tellus之后的所有单词