我需要在文本文件中搜索字符串后面的特定数字。例如,我有以下数据:
yyy = 80rr, xxx = 136rr, zzz = 95rr
yyy
我想要复制和rr
和xxx
之间的数字rr
。zzz
rr
然后我想要回显这些数字。可以吗?
答案1
如果使用纯 Windows 工具,最好的选择可能是 Powershell。一行代码:在 PS 中:
$(sls '[0-9]+' filename.txt -allm).Matches.Value
从 CMD.EXE:
powershell -c "$(sls '[0-9]+' test.txt -allm).Matches.Value"
对于仅包含您的行的文本文件(名为filename.txt
),这将打印以下内容:
80
136
95
我在多行文件和每行多个数字上测试了它,它仍然有效,将每个数字打印在自己的行上。现在,如果您文件中有任何其他您不想回显的数字,它们也会被回显。为了避免这种情况,我们可以只匹配以 结尾的数字rr
:
$(sls '[0-9]+rr' test.txt -allm).Matches | foreach {$_.Value.trim('r')}
或者
powershell -c "$(sls '[0-9]+rr' test.txt -allm).Matches | foreach {$_.Value.trim('r')}"
答案2
在 Linux 中,您可以使用gawk
命令。我这样做过:
echo "yyy = 80rr, xxx = 136rr, zzz = 95rr" | gawk '{ match($0, /.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+)/, array); printf "%d %d %d\n",array[1], array[2], array[3]}';
结果是:
80 136 95
就你的情况而言:
cat file.txt | gawk '{ match($0, /.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+)/, array); printf "%d %d %d\n",array[1], array[2], array[3]}';