如何使用Grep和RegEx查找指定单词前后的字符串
例如,我有一个包含ff字符串集的文件如何使用Grep和RegEx查找指定单词前后的字符串,regex,bash,shell,unix,Regex,Bash,Shell,Unix,例如,我有一个包含ff字符串集的文件 AAA1111BBB -> FILE1 AAA2222BBB -> FILE2 AAA3333BBB -> FILE3 现在在unix中,我想通过搜索AAA作为行的开始,BBB作为模式的结束来提取所有ID。输出将是这样的 1111 2222 3333 然后我想删除所有重复条目,然后将其保存在文件中。我怎样才能做到这一点呢?如果你有grep-p选项,你可以试试 (?<=A{3})\d+(?=B{3}) (?好吧,您的小示例可以通过
AAA1111BBB -> FILE1
AAA2222BBB -> FILE2
AAA3333BBB -> FILE3
现在在unix中,我想通过搜索AAA作为行的开始,BBB作为模式的结束来提取所有ID。输出将是这样的
1111
2222
3333
然后我想删除所有重复条目,然后将其保存在文件中。我怎样才能做到这一点呢?如果你有
grep-p
选项,你可以试试
(?<=A{3})\d+(?=B{3})
(?好吧,您的小示例可以通过以下命令完成:
sed -e 's/^AAA//' -e 's/BBB.*//' input.txt | sort -u > output.txt
但是,我的猜测是,您的玩具示例可能无法准确解释您试图通过GNU awk实现的目标。:
gawk '
match($1, /^AAA(.*)BBB$/, m) {keys[m[1]]=1}
END {for (k in keys) print k}
' file
或perl
perl -nE '/^AAA(\w+)BBB/ and $k{$1}=1 }END{ say join "\n", keys %k' file
我假设您的ID是4位数字:
grep -oE "AAA[0-9]{4}BBB" <filename> | grep -oE "[0-9]{4}"
grep-oE“AAA[0-9]{4}BBB”| grep-oE“[0-9]{4}”
编辑:
如果你有类似于“AAA12@3BBB“:
grep-oE“AAA.{4}BBB”| grep-oE“[0-9,@]{4}”
如果我有一个包含AAAZ1@6BBB然后将\d+
更改为+?
并且,使用grep-o-P模式
仅发出matches@PeterS使用*?
代替\d+
grep -oE "AAA.{4}BBB" <filename> | grep -oE "[0-9,@]{4}"