Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 查找由一个或多个由下划线连接的单词组成的字符串_Shell_Terminal_Macos Mojave - Fatal编程技术网

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

Shell 查找由一个或多个由下划线连接的单词组成的字符串,shell,terminal,macos-mojave,Shell,Terminal,Macos Mojave,问题: 编写一个显示所有唯一字符串的命令。字符串由一个或多个由下划线连接的单词组成,一个单词是一个或多个字母字符:lamp change、rise reason、mei,但不包括15 mei或2015 risetime 我已经将csv文件剥离,因此它看起来像这样(1列): 我只需要这个字符串/列的“lamp\u change”部分 在macOS终端上运行。我已经尝试过使用grep命令,但是它只显示所有的lamp\u更改,而不是一个。我想我需要将正则表达式与grep命令结合使用 csv文件如下所示

问题: 编写一个显示所有唯一字符串的命令。字符串由一个或多个由下划线连接的单词组成,一个单词是一个或多个字母字符:
lamp change
rise reason
mei
,但不包括
15 mei
2015 risetime

我已经将csv文件剥离,因此它看起来像这样(1列):

我只需要这个字符串/列的“lamp\u change”部分

在macOS终端上运行。我已经尝试过使用grep命令,但是它只显示所有的
lamp\u更改
,而不是一个。我想我需要将正则表达式与
grep
命令结合使用

csv文件如下所示:

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
这给了我同样的答案

$ sed -E 's/ \+/\n/' hue_string.csv 
此代码的结果与csv文件完全相同。它应该在列表中包含所有动作,如
换灯
今晚就寝时间
,等等。

使用
-o
(或
--仅匹配
)开关:

输出:

adherence_importance
amp_change
lamp_change
morning_backup
start_experiment
target_url

注意:
-i
开关使搜索不区分大小写
sort-u
sort | 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
使用
-o
(或
-仅匹配
)开关:

输出:

adherence_importance
amp_change
lamp_change
morning_backup
start_experiment
target_url

注意:
-i
开关使搜索不区分大小写
sort-u
sort | 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
请澄清排序输出中是否应包含“augustus”、“juni”和“morning_backup_minute”。请澄清排序输出中是否应包含“augustus”、“juni”和“morning_backup_minute”。