【问题标题】:extract string between two practices using awk [duplicate]使用 awk 在两种做法之间提取字符串 [重复]
【发布时间】:2017-11-08 13:26:02
【问题描述】:

我尝试使用awk 从字符串中读取字符串。 我的字符串:

str = /xx/{hello}/xxx/xx{there}/xxx [again]

我想提取helloagain。 我已经设法使用:

echo $str | awk -F[{}] '{print $2}'

但尝试对[] 之间的字符串做同样的事情,但我做不到。也试过awk -F[[]] '{print $2}'awk -F[/[/]] '{print $2}'

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 我不认为“实践”是“成对的括号分隔符”或任何您希望它的意思的易于理解的术语。

标签: bash awk


【解决方案1】:

关注awk 应该对您有所帮助。

echo "$str" | awk -F"[]}{[]" '{print $2,$6}'

输出如下。

hello again

您还应该为 str 变量值分配不带空格的值,如下所示。

str="/xx/{hello}/xxx/xx{there}/xxx [again]"

【讨论】:

  • @user3439894,不确定我认为它以前被编辑过,现在让我重新表述我的命令,然后让你知道。
  • @user3439894,相应地更改了解决方案,如果有任何疑问,请告诉我。
【解决方案2】:

您可以使用以下awk程序:

awk '!(NR%2)' RS='[][{}]' <<< "${str}"

在做什么?

基本上我们使用{}[] 作为记录分隔符。这意味着 awk 会看到以下记录的序列:

/xx/
hello
/xxx/xx
there
/xxx 
again

感兴趣的条款总是出现在 even 记录中。在这种情况下,记录 2、4 和 6。awk '!(NR%2)' 打印具有偶数索引的记录。

【讨论】:

  • 您的 awk 命令打印 hellothereagain,而不仅仅是 OP 中所述的 helloagain,“我想提取 helloagain".
猜你喜欢
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2018-07-26
  • 2020-03-23
  • 2016-04-26
  • 2012-11-27
相关资源
最近更新 更多