我有一个list of the Unicode emojis,我想从中删除表情符号(即只需要整个第一部分和行尾的名字)。示例行如下所示:
1F468 1F3FD 200D 2695 FE0F ; fully-qualified # ⚕️ man health worker: medium skin tone
1F469 1F3FF 200D 2695 ; non-fully-qualified # ⚕ woman health worker: dark skin tone
(为了简单起见,我删除了一些空格)。我想要匹配的是[non-]fully-qualified
部分以及#
和表情符号,因此我可以使用sed
删除它们。我试过以下正则表达式
sed -e 's/\<[on-]*fully-qualified\># *.+?(?=[a-zA-Z]) //g'
尝试匹配单词[non-]fully-qualified
一个空格,#
符号,然后找到你能找到的任何内容(非贪婪)直到第一个字母,然后用空字符串替换它。
我想有这个输出:
1F468 1F3FD 200D 2695 FE0F ; man health worker: medium skin tone
1F469 1F3FF 200D 2695 ; woman health worker: dark skin tone
我已经尝试了几个已发布的答案但无济于事,此外,我试图在两个边界之间匹配一个模式,这是我遇到了麻烦
编辑:我试图在git for windows附带的git bash中运行该命令答案 0 :(得分:1)
我喜欢搜索我实际上想要的,然后保留它。
这在我的测试中适用于OS X:
sed -E 's/^([^#]+)#[^a-zA-Z\s]*(.*)$/\1 # \2/g'
编辑:我没有试用sed
的Windows版本,但也许这样可行。不那么精确,但简短而简单。
sed -e 's/#\s*[^a-zA-Z\s]*/# /g'
再次编辑:我的不好,我再次阅读了这个问题,你想删除的不仅仅是表情符号。这个应该这样做。
sed -e 's/;[^#]*#\s*[^a-zA-Z\s]*/; /g'
答案 1 :(得分:1)
我仍然不太确定,但这可能会奏效:
sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /'
这将替换任何分号;
,后跟任何字符.*
,后跟“完全限定”文本,后跟任意数量的空格,后跟一个主题标签,然后是通过不 a-zA-Z [^a-zA-Z]
的任何字符,并用分号后跟空格替换所有字符。
要确保[a-zA-Z]
仅捕获 a到z 和 A到Z 而没有任何其他字符,这似乎是一个问题,快速修复该命令只能使用LC_ALL=C
:
LC_ALL=C sed 's/;.*fully-qualified\s*#[^a-zA-Z]*/; /' file