当行的前半部分与两个子字符串之间的 space 匹配时更改行的一部分(正则表达式)
Change a section of a line when it matches the first half with space between the two substrings (Regex)
我正在尝试使用 Perl 中的正则表达式检查来更改一名学生的所有成绩。
文件(grades.txt)格式如下:
Student One - Individual Project - MF
Student Two - OOP2 - B
Student One - Other Module - C
Student Two - Other Module - F
Student One - Final Module - A+
到目前为止我所拥有的是 cat grades.txt | perl -ne 's/(w{1,2})\+?(?!.)/A/g; print;
这会将所有成绩更改为 A,但我只想将 Student One 的成绩更改为 A。
我也尝试将正则表达式更改为 (<?="Student One")\K(w{1,2})\+?(?!.)
但那不匹配任何东西,我觉得这与 "Student One" 和成绩之间有其他字符有关。
我还想将新的、更改后的结果输出到新文件(例如 Agrades.txt)。
当您想将文件内容传递给 Perl 程序时,最好避免 cat
。如果您指定一个文件列表作为参数,那么 Perl 将读取所有文件。
此解决方案使用 perl 的 -p
开关,它在打印输出之前对输入文件中的每一行执行 -e
的内容。我还使用了 /x
正则表达式修饰符,它允许您添加无关紧要的空格,以便可以更清楚地布置模式。
替换与您自己的替换非常相似,但后面跟着一个 if
语句修饰符,以确保更改仅发生在以 Student One
开头的行上。 \b
匹配一个 单词边界 ,这是为了确保学生的名字以 One
结尾,而不是像 Student Onedin
.[=22= 这样的东西]
perl -pe"s/ [A-Z]+ \+? $ /A/x if /^Student One\b/" grades.txt
您可以在 Perl 程序中打开输出文件,但使用 >
重定向输出通常更简单,就像这样
perl -pe"s/ [A-Z]+ \+? $ /A/x if /^Student One\b/" grades.txt > Agrades.txt
这样你就可以通过将结果发送到你的终端来检查结果,然后在你确定它是正确的时候将它写入一个文件。
我正在尝试使用 Perl 中的正则表达式检查来更改一名学生的所有成绩。 文件(grades.txt)格式如下:
Student One - Individual Project - MF
Student Two - OOP2 - B
Student One - Other Module - C
Student Two - Other Module - F
Student One - Final Module - A+
到目前为止我所拥有的是 cat grades.txt | perl -ne 's/(w{1,2})\+?(?!.)/A/g; print;
这会将所有成绩更改为 A,但我只想将 Student One 的成绩更改为 A。
我也尝试将正则表达式更改为 (<?="Student One")\K(w{1,2})\+?(?!.)
但那不匹配任何东西,我觉得这与 "Student One" 和成绩之间有其他字符有关。
我还想将新的、更改后的结果输出到新文件(例如 Agrades.txt)。
当您想将文件内容传递给 Perl 程序时,最好避免 cat
。如果您指定一个文件列表作为参数,那么 Perl 将读取所有文件。
此解决方案使用 perl 的 -p
开关,它在打印输出之前对输入文件中的每一行执行 -e
的内容。我还使用了 /x
正则表达式修饰符,它允许您添加无关紧要的空格,以便可以更清楚地布置模式。
替换与您自己的替换非常相似,但后面跟着一个 if
语句修饰符,以确保更改仅发生在以 Student One
开头的行上。 \b
匹配一个 单词边界 ,这是为了确保学生的名字以 One
结尾,而不是像 Student Onedin
.[=22= 这样的东西]
perl -pe"s/ [A-Z]+ \+? $ /A/x if /^Student One\b/" grades.txt
您可以在 Perl 程序中打开输出文件,但使用 >
重定向输出通常更简单,就像这样
perl -pe"s/ [A-Z]+ \+? $ /A/x if /^Student One\b/" grades.txt > Agrades.txt
这样你就可以通过将结果发送到你的终端来检查结果,然后在你确定它是正确的时候将它写入一个文件。