加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – unix命令从单词的第一个和最后一个出现之间获取行并写入

发布时间:2020-12-15 22:08:45 所属栏目:安全 来源:网络整理
导读:我想要一个unix命令来查找第一个和第一个之间的行.最后一个词出现 例如: 让我们想象我们有1000行.第十行包含单词“stackoverflow”,第三十五行也包含单词“stackoverflow”. 我想打印10到35之间的行并将其写入新文件. 解决方法 你可以分两步完成.基本思路是
我想要一个unix命令来查找第一个和第一个之间的行.最后一个词出现

例如:

让我们想象我们有1000行.第十行包含单词“stackoverflow”,第三十五行也包含单词“stackoverflow”.

我想打印10到35之间的行并将其写入新文件.

解决方法

你可以分两步完成.基本思路是:

1)获取第一个和最后一个匹配的行号.

2)打印这些范围之间的行范围.

$read first last <<< $(grep -n stackoverflow your_file | awk -F: 'NR==1 {printf "%d ",$1}; END{print $1}')
$awk -v f=$first -v l=$last 'NR>=f && NR<=l' your_file

说明

> read first last读取两个值并将它们存储在$first和$last中.
> grep -n stackoverflow your_file greps并显示如下输出:number_of_line:output
> awk -F:’NR == 1 {printf“%d”,$1}; END {print $1}’)打印文件中stackoverflow的第一个和最后一个匹配的行数.

> awk -v f = $first -v l = $last’NR> = f&& NR< = l'your_file打印从$first行号到$last行号的所有行.
测试

$cat a
here we
have some text
stackoverflow

and other things
bla
bla
bla bla
stackoverflow
and whatever else
stackoverflow
to make more fun
blablabla

$read first last <<< $(grep -n stackoverflow a | awk -F: 'NR==1 {printf "%d ",$1}; END{print $1}')
$awk -v f=$first -v l=$last 'NR>=f && NR<=l' a
stackoverflow

and other things
bla
bla
bla bla
stackoverflow
and whatever else
stackoverflow

按步骤:

$grep -n stackoverflow a
3:stackoverflow
9:stackoverflow
11:stackoverflow

$grep -n stackoverflow a | awk -F: 'NR==1 {printf "%d ",$1}; END{print $1}'
3 11

$read first last <<< $(grep -n stackoverflow a | awk -F: 'NR==1 {printf "%d ",$1}; END{print $1}')

$echo "first=$first,last=$last"
first=3,last=11

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读