gpt4 book ai didi

regex - sed 提取每行中的唯一字符

转载 作者:行者123 更新时间:2023-12-05 09:28:49 25 4
gpt4 key购买 nike

我想在 Shell 脚本 (sh) 中使用正则表达式在每一行中获取唯一的字符。换句话说,我想删除每行中任何进一步出现的字符。

我正在尝试回答这个问题:“每行中出现了哪些字符?

例如,我正在尝试做这样的事情:

echo '1.Hi
2.This is
3.a huge file
4.with repeated chars
5.per
6.line' | sed 's/MYSTERIOUS_REGEX/MYSTERIOUS_REPLACE/g'

预期的输出是:

1.Hi
2.This
3.a hugefil
4.with repadcs
5.per
6.line

这是解释:

  • 第 1 行:没有任何重复的字符
  • 第 2 行:“i”、“s重复
  • 第 3 行:' ','e' 重复
  • 第 4 行:'e'、'a'、't'、'e'、 'd', ' ', 'c', 'h', 'a', 'r' 重复
  • 第 5 行:没有任何重复的字符
  • 第 6 行:没有任何重复的字符

OBS:

  • 如果您使用 shsed 实现此目的,您将获得 5⭐s
  • 如果您使用其他工具(bashawk 等)实现此目的,您将获得 3⭐s

̶D̶i̶s̶t̶r̶a̶c̶t̶o̶r̶̶提示:

以下正则表达式匹配没有重复字符的行:^(?:([A-Za-z])(?!.*\1))*$

echo "bleh" | grep -P '^(?:([A-Za-z])(?!.*\1))*$'

ble

echo "fooo" | grep -P '^(?:([A-Za-z])(?!.*\1))*$'

(empty)



最佳答案

您可以使用此 gnu-sed 解决方案:


sed -E ':a;s/((.).*)\2/\1/;ta' file

1.Hi
2.This
3.a hugefil
4.with repadcs
5.per
6.line

替代的 awk 非正则表达式解决方案(应该适用于任何 awk 版本):

awk '{
delete seen
for (i=1; i<=length(); ++i) {
ch = substr($0,i,1)
if (!seen[ch]++) printf "%s", ch
}
print ""
}' file

1.Hi
2.This
3.a hugefil
4.with repadcs
5.per
6.line

关于regex - sed 提取每行中的唯一字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71093563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com