查找该行开头的所有字符“[1-777])”

查找该行开头的所有字符“[1-777])”

伪命令

perl -pe 'g/^[1-777])/g' data.txt 

我尝试在行开头的所有数字后面加上“)”等1)67)777)

应该找到所有问题编号(等等,,1)...但不是和不是)的数据16)68)16.778)

1) hello 
A) Options here which should be not matched. 
16) hello 16. old
A) Options here which should be not matched. 
68) yes question
A) Options here which should be not matched. 
...
582) hurray
A) Options here which should be not matched. 
778)
A) Options here which should be not matched. 

其中仅查找 777 之前的数字。

想要的输出

1,16,68,582,777 

然后我可以将其提供给我的 Sed 命令。最后,如果可能的话,返回此命令的结果(以逗号分隔):sed -n '1,4,582' full_data.txt, 讨论这里,那么某种从 perl 到 sed 的管道或者只是在 perl 中?

如何返回行首的所有数字?

答案1

正如一些澄清迭代所示,只有整数且值不大于 777 才应收集到逗号分隔的列表中。开始了:

awk -F ')' '$1~/^[0-9]+$/ && $1<=777 {print $1}' <datafile | paste -sd,

注意:要匹配整数范围,您还可以awk编写:

awk -F ')' '$1>=1 && $1<=777 {print $1}' <datafile | paste -sd,


我保留下面的变体作为相关任务的构建块。

创造所有问题编号:

cut -d ')' -f1 <datafile | paste -sd,

它创建了这个输出:

1,2,3,...,582

或者,如果条目带有空洞的答案(如 777)不应被视为:

awk -F ') ?' '$2!="" {print $1}' <datafile | paste -sd,

或者,如果有一个数值限制777 考虑:

awk -F ')' '$1<=777 {print $1}' <datafile | paste -sd,

或者仅匹配整数在第一个字段中:

awk -F ')' '$1~/^[0-9]+$/ {print $1}' <datafile | paste -sd,

答案2

我会首先提取候选者,然后检查最大 777:

egrep '^[0-7]?[0-9][0-9]?)' file | sed 's/^\([0-7]\?[0-9][0-9]\?\))/\1 )/' | awk '($1 < 778) {print $0}' | sed 's/^\([0-7]\?[0-9][0-9]\?\) ).*/\1,/' | tr --delete \\n | sed 's/,$/\n/'

它适用于我的测试文件。 (编辑1:最后一个 sed 现在仅给出数字编辑2:删除尾随,

相关内容