我希望将文件names中的每一行拆分为delim文件中的每个分隔符,并将惟一的单词组合存储到结果文件compounds中。应该从输出文件中删除names中未拆分的行。只有4个分隔符:-'+
重要的:names文件包含utf-8编码的人名。
$ cat delims
 (space is here)
-
'
+
$ cat names
Tania
Günter
Abdel+Aziz
Abdel'Piza
Märie-Pierre输出复合文件应该是(排序不重要):
Abdel
Aziz
Piza
Märie
Pierre发布于 2020-07-03 19:11:57
使用grep、tr和sort:
注意:我们需要将-中的delims移动到文件的顶部或底部(否则tr会认为存在范围)。
用grep获取包含分隔符字符的所有行,用换行符替换所有分隔符(用tr -d '\n' < delims获取delims中没有换行符的所有字符)。
将结果输送到sort -u以消除重复,并将输出重定向到compounds。
grep -F -f delims names | tr -- "$(tr -d '\n' < delims)" '\n' | sort -u > compounds输出:
$ cat compounds
Abdel
Aziz
Märie
Pierre
Piza发布于 2020-07-04 00:45:45
我们首先用商函数建立一个正则表达式,它引用所有的特殊字符,然后通过正则表达式或|连接它们。我们跳过不包含至少一个来自regex元素的名称中的任何行。对于其余部分,我们在regex上拆分它们,然后只打印一行一个统一的元素。
$ perl -lne '
    $re //= join "|", map { chomp;quotemeta; } ;
    next unless /$re/;
    print for grep { ! $seen{$_}++ } split /$re/;
' names < delims
Abdel
Aziz
Piza
Märie
Pierrehttps://unix.stackexchange.com/questions/596531
复制相似问题