查找由下划线连接的一个或多个单词组成的字符串

时间:2019-06-06 16:39:39

标签: shell terminal macos-mojave

问题: 编写一个显示所有唯一字符串的命令。字符串由一个或多个带下划线的单词组成,一个单词是一个或多个字母字符:lamp changerise reasonmei,但不是15 mei或{{ 1}}。

我已经剥离的csv文件看起来像这样(1列):

2015 risetime

我只需要此字符串/列的“ lamp_change”部分。

在macOS终端上运行。我已经尝试过使用grep命令,但是它仅显示所有lamp_change_10_augustus_2015_16_15_28_637 而不是仅显示一个。我想我需要结合使用正则表达式和lamp_change命令

csv文件如下:

grep

这就是我尝试过的

amp_change_06_augustus_2015_12_19_30_785
lamp_change_06_augustus_2015_12_19_30_989
lamp_change_06_augustus_2015_12_19_31_007
lamp_change_10_augustus_2015_16_15_27_451
lamp_change_10_augustus_2015_16_15_28_479
lamp_change_10_augustus_2015_16_15_28_637
lamp_change_10_augustus_2015_16_15_28_644
morning_backup_hour
morning_backup_minute
start_experiment
target_url
0009_02_juni_2015_adherence_importance

这给了我相同的答案

$ grep -E  "([a-z]+_[a-z]+)" hue_string.csv|sort|uniq

此代码的结果与csv文件相同。它应在列表中包含$ sed -E 's/ \+/\n/' hue_string.csv lamp_change等所有动作。

1 个答案:

答案 0 :(得分:0)

使用-o(或--only-matching)开关:

grep -ioE  "([a-z]+_[a-z]+)" hue_string.csv | sort -u

输出:

adherence_importance
amp_change
lamp_change
morning_backup
start_experiment
target_url

注意:-i开关使搜索不区分大小写。 sort -usort | uniq更简单。上面的答案假设输出应该是两个单词,中间是_,这是 OP 代码所发现的,但是标题暗示了更具包容性的东西……在这种情况下:

grep -ioE  "([a-z][a-z_]+[a-z])" foo|sort -u

输出:

adherence_importance
amp_change
augustus
juni
lamp_change
morning_backup_hour
morning_backup_minute
start_experiment
target_url