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