查找具有未知起点的子字符串,并在较大的字符串
中确定不确定的长度(.+)([A-Z\.]+)(.+)
我想要提取的子字符串只有大写字母和句点:[A-Z \。] +
子字符串在不同文档中的长度不同
我不知道我正在寻找的子字符串之前的子字符串的长度。
你可以从上面的grep看到grep的第一部分
(.+)
基本上抓住了整个字符串。
如何创建一个grep,说明:找到X个字符直到您遇到一串只有大写字母和句点的字符串。
(如何替换grep的第一部分?)
示例字符串:
###_random_length_data_here_###____YFJSR.BZMN.FZGTSODZY.RIVU.ZPZOQPIKC.TIVIUHIFV.HBXORXONITZMN....NUH...NTL...KTM.PESNLQ.OZQEHESQORNHLI.ULNLBMRSQ.XWK.OWEBGKTHM.EMVQFXPXCMBTSX.KRBKUU.ENP...DGW...RJB....HININSFJBJIXG.TTFDZRUBD.GIXVFMZEH.FOQU.WBFMWWVOG.HOQI.FOHZK___###_other_random_length_data_here_###
中间的数据从字符串中的未知索引开始,具有不同的长度,具体取决于文档。
预期输出只是第二个子字符串:
YFJSR.BZMN.FZGTSODZY.RIVU.ZPZOQPIKC.TIVIUHIFV.HBXORXONITZMN....NUH...NTL...KTM.PESNLQ.OZQEHESQORNHLI.ULNLBMRSQ.XWK.OWEBGKTHM.EMVQFXPXCMBTSX.KRBKUU.ENP...DGW...RJB....HININSFJBJIXG.TTFDZRUBD.GIXVFMZEH.FOQU.WBFMWWVOG.HOQI.FOHZK
下划线和磅符号在实际数据中不是分隔符,只是为了显示三个子串之间的某些分隔并使示例数据更易于阅读。
答案 0 :(得分:1)
只需使用带有GNU grep
标记的-E
进行扩展正则表达式语法匹配,匹配[A-Z]
或.
及其多个实例,
grep -Eo '[A-Z|.]+' file
YFJSR.BZMN.FZGTSODZY.RIVU.ZPZOQPIKC.TIVIUHIFV.HBXORXONITZMN....NUH...NTL...KTM.PESNLQ.OZQEHESQORNHLI.ULNLBMRSQ.XWK.OWEBGKTHM.EMVQFXPXCMBTSX.KRBKUU.ENP...DGW...RJB....HININSFJBJIXG.TTFDZRUBD.GIXVFMZEH.FOQU.WBFMWWVOG.HOQI.FOHZK
(或)使用egrep
egrep -o '[A-Z|.]+' file
YFJSR.BZMN.FZGTSODZY.RIVU.ZPZOQPIKC.TIVIUHIFV.HBXORXONITZMN....NUH...NTL...KTM.PESNLQ.OZQEHESQORNHLI.ULNLBMRSQ.XWK.OWEBGKTHM.EMVQFXPXCMBTSX.KRBKUU.ENP...DGW...RJB....HININSFJBJIXG.TTFDZRUBD.GIXVFMZEH.FOQU.WBFMWWVOG.HOQI.FOHZK
在包含二进制.txt
文件的文件夹
for file in *.txt
do
grep -Eao '[A-Z|.]+' "$file" >> outputFile.txt
done
(或)包含文本文件的文件夹中的命令行友好版本
for file in *.txt; do grep -Eao '[A-Z|.]+' "$file" >> outputFile.txt; done
这会将grep
与regex
一起运行到目录中的所有文件,并将其附加到outputFile.txt