提取第n个pattern1和第m个pattern2之间的字符串-sed / awk

克里斯

在下面的示例中,如何返回第n个pattern1和第m个pattern2之间字符串,其中pattern1和pattern2在字符串中可能多次出现?

更好的例子:

zz this is string xx zz another string xx third string zz xx and a tail xx

您将如何在第二个zz和第三个xx之间返回?

another string xx third string zz

编辑:对于那些寻找这一点,正则表达式“捕获组”和“前进/后退参照”似乎是需要什么这个任务。该术语在这里有用的信息

上面编辑

对不起初始助手。您的回答很好,我的榜样选择不当。

随意从此处删除,以整理此问题。为了完整起见,我将其保留为原始答案。

可怜的原始问题和例子:

echo '1a 2b 3c 4d 5e 6f 7g 8h 9i 0j'

如果可以同时提出两个解决方案而又不留空格的话,将为您加分。我知道可以通过重新布置sed来删除前导/后部空格,但是我很好奇是否有更整洁的解决方案。我期望的输出(不包括单引号)是:

'3c 4d 5e 6f' 要么 ' 3c 4d 5e 6f '

  • 我正在使用sed / awk,以便将来希望将其扩展为匹配pattern1的第n个出现和pattern2的第m个出现,而不仅仅是匹配单个字符(空格)

我尝试了几种变体。我相信这是用sed校正的最近的方法:

echo '1 2 3 4 5 6 7 8 9 0' | sed -n 's/.*[ ]{2}.*[ ]{4}.*/\1/p'

但是,它返回错误:

sed -e expression #1, char 28: invalid reference \1 on `s' command's RHS
内贾特·艾丁

使用普通的GNU sed

pat1='zz'
n=2
pat2='xx'
m=3

echo 'zz this is string xx zz another string xx third string zz xx and a tail xx' |
sed "s/$pat1/\n/$n; s/$pat2/\n/$m; s/[^\n]*\n//; s/\n.*//"

产出

 another string xx third string zz    

s/$pat1/\n/$n换行符替换$nth $pat1
s/$pat2/\n/$m换行符替换$mth $pat2
s/[^\n]*\n//删除字符串开头和第一个换行符(包括)之间的部分。
s/\n.*//删除换行符(包括)和字符串末尾之间的部分。

注意sed命令可以稍微简化为sed -E "s/$pat1/\n/$n; s/$pat2/\n/$m; s/.*\n(.*)\n.*/\1/"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

awk打印模式匹配的行,并且如果pattern1的行具有pattern2,则将pattern1和第n行之后的行打印为单行

来自分类Dev

了解sed / awk ^和[]

来自分类Dev

awk / sed-在比赛后打印第n个值

来自分类Dev

awk / sed从模式之间提取字符串

来自分类Dev

使用sed或awk提取2个图案之间的线

来自分类Dev

awk和sed分割文件

来自分类Dev

sed和awk导致换行

来自分类Dev

需要SED和/或awk帮助

来自分类Dev

使用列-AWK和SED

来自分类Dev

AWK / Sed字符串操作

来自分类Dev

使用Sed或Awk替换字符串

来自分类Dev

sed 或 awk 匹配部分字符串

来自分类Dev

使用grep / sed / awk从字符串中提取单词

来自分类Dev

使用grep / sed / awk从字符串中提取单词

来自分类Dev

需要sed awk或grep输出以提取字符串

来自分类Dev

sed / awk / grep查找分号之间的字符串

来自分类Dev

使用sed / awk命令仅在文件中第N个出现模式的地方删除'N'行

来自分类Dev

使用sed / awk命令仅在文件中第N个出现模式的地方删除'N'行

来自分类Dev

使用awk和sed在字符串中递增数字

来自分类Dev

使用sed,awk提取部分文本

来自分类Dev

如何使用awk / sed提取json文件?

来自分类Dev

awk 或 sed 单独提取每个列数

来自分类Dev

在sed而不是awk处找到并替换第n个字符或第n个字符之前的最后一个空格,我在做什么错?

来自分类Dev

使用sed或awk替换列之间的文本

来自分类Dev

在特定范围之间打印 - sed 或 awk

来自分类Dev

使用sed或awk替换空格字符

来自分类Dev

使用awk和sed合并特定行

来自分类Dev

sed,grep和awk文件排序

来自分类Dev

如何使用剪切和AWK sed的?