是否可以使用bash从文本文件中检索两个特殊字符之间的一个字符串



假设我有以下文本文件

test.txt
ABC_01:Testing-ABCDEFG

如果我想检索冒号后的字符串,我将使用

awk -F ":" '/ABC_01/{print $NF}' test.txt

将返回Testing-ABCDEFG

但是,如果我只想检索冒号之后的字符串和连字符之前的字符串<strong,该怎么办?>

你太接近了。这就是split()的作用,例如

awk -F: '/ABC_01/{ split($NF,arr,"-"); print arr[1] }'

哪个将输出

Testing

GNU Awk用户指南-字符串操作函数提供了有关split()的详细信息。试试看,如果你还有其他问题,请告诉我。

在扩展Regex引擎中使用Bash的内置

#!/usr/bin/env bash
while read -r; do
[[ $REPLY =~ :(.*)- ]] || :
echo "${BASH_REMATCH[1]}"
done

使用标准POSIX外壳IFS字段分隔符:

#!/usr/bin/env sh
while IFS=':-' read -r _ m _; do
echo "$m"
done

使用(GNU(grep并环顾四周:

$ grep -oP '(?<=:)[^-]*(?=-)' file
Testing

解释:

  • grepGNU grep支持PCRE和环视
  • `-o只打印匹配行的匹配(非空(部分
  • -P将模式解释为与Perl兼容的正则表达式
  • (?<=:)正面向后看,即前面有冒号
  • [^-]*除了连字符之外的任何字符
  • (?=-)积极向前看,即后面跟一个连字符

相关内容

  • 没有找到相关文章

最新更新