linux 如何在ERE中结束此正则表达式

qkf9rpyu  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(164)

我正在攻读数据科学硕士学位的脚本主题,我做了下面的前一个问题:
How to filter all values in Bash's regular expression (Linux) except one?
我发现ERE并不完全是Bash。但我又卡住了。
翻译评估声明:
正则表达式必须在运行grep命令的名为www.example.com的Bash脚本中使用script.sh。该脚本应按以下方式运行:
./script.sh./headlines_words.csv
文件headline_words.csv的示例数据为:

Unnamed: 0;Unnamed: 0.1;year;country;word;frequency;count;freq_prop_headlines;word_len;freq_rank;hfreq_rank;theme
14;279;2012;India;cricketer;0;3634;0.0;9;20;20;empowerment
8964;52224;2010;USA;witchcraft;0;1912;0.0;10;935;935;female stereotypes
9887;57556;2021;all countries;hate;312;234227;0.001332041;4;436;429;crime and violence

我有三个条件:

  • 年份为2010年至2011年
  • freq_rank列的值大于或等于910
  • 国家栏不是“所有国家”

因此,./script.sh./headlines_words.csv的正确输出必须是:

Unnamed: 0;Unnamed: 0.1;year;country;word;frequency;count;freq_prop_headlines;word_len;freq_rank;hfreq_rank;theme
8964;52224;2010;USA;witchcraft;0;1912;0.0;10;935;935;female stereotypes

对于www.example.com,我使用了grep -E(我知道它不适合,但必须使用它)和以下代码script.sh:

#!/bin/bash

grep -E '^([^;]*;){2}201[01];([^a]|a[^l]|al[^l]|all[^ ]|all [^c]|all c[^o]|all co[^u]|all cou[^n]|all coun[^t]|all count[^r]]|all countr[^i]]|all countri[^e]|all countrie[^s]);[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;9[1-9][0-9]{2,}' $1

以下部分:

^([^;]*;){2}201[01];

并且:

([^a]|a[^l]|al[^l]|all[^ ]|all [^c]|all c[^o]|all co[^u]|all cou[^n]|all coun[^t]|all count[^r]]|all countr[^i]]|all countri[^e]|all countrie[^s])

单独和一起工作。
但最后一部分:

[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;9[1-9][0-9]{2,}'

我有一个错误,因为当我在Ubuntu中运行代码./script.sh./headlines_words.csv时,终端没有给予我任何行。
非常感谢您的宝贵时间!

1dkrff03

1dkrff031#

鉴于您的项目要求使用grep -E,以下是grep解决方案:

grep -E '^([^;]*;){2}201[01];([^a]|a[^l]|al[^l]|all[^ ]|all [^c]|all c[^o]|all co[^u]|all cou[^n]|all coun[^t]|all count[^r]]|all countr[^i]]|all countri[^e]|all countrie[^s])([^;]*;){6}(9[1-9][0-9]|[1-9][0-9]{3,});' file

8964;52224;2010;USA;witchcraft;0;1912;0.0;10;935;935;female stereotypes

RegEx Demo
然而,我必须补充的是,awk是更适合这项工作的工具,awk解决方案如下:

awk -F ';' '
 NR == 1 || ($3 ~ /^201[01]$/ && $4 != "all countries" && $10 >= 910)
' file

Unnamed: 0;Unnamed: 0.1;year;country;word;frequency;count;freq_prop_headlines;word_len;freq_rank;hfreq_rank;theme
8964;52224;2010;USA;witchcraft;0;1912;0.0;10;935;931;female stereotypes

相关问题