我想删除所有字符,直到[a-zA-Z]
字符串中的第一个字母。例如:
#121Abc
-->Abc
%Ab#c
-->Ab#c
Ab#c
-->Ab#c
Abc
-->Abc
1Abc
-->Abc
1 21Abc
-->Abc
1^1 Abc
-->Abc
注意:所有非字母都包括非印刷字符。
bash工具可以吗?
我想删除所有字符,直到[a-zA-Z]
字符串中的第一个字母。例如:
#121Abc
-->Abc
%Ab#c
-->Ab#c
Ab#c
-->Ab#c
Abc
-->Abc
1Abc
-->Abc
1 21Abc
-->Abc
1^1 Abc
-->Abc
注意:所有非字母都包括非印刷字符。
bash工具可以吗?
与
awk
:与
sed
:注意:如果您的行中没有字母字符,它将在输出中以空行结束,要跳过打印这些行以及跳过输入中的空行,您需要使用:
或同样的做法
grep
(感谢@glennjackman)使用 POSIX sh 参数扩展运算符(最初来自 ksh),假设输入在 shell 变量中:
请注意,
[A-Za-z]
除了 C 语言环境之外,未指定匹配的内容。在实践中,它是相当随机的,尤其是对于bash
shell。[[:alpha:]]
匹配区域设置中被视为字母的所有字符(或更一般地,即使在非字母脚本中,通常也是人类语言单词转录的一部分的字符)。无论语言环境如何,要仅匹配 ASCII 英文字母,您可以使用[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
.仅使用 Bash:
(依此类推,设置
a
为您要处理的任何字符串)。使用Raku(以前称为 Perl_6):
或者(更简单):
样本输入:
样本输出:
包括这个答案,以防 OP 有需要处理的 Unicode 文本。简而言之,Raku 的
-pe
自动打印行标志用于实现众所周知的 (sed
-like)s///
习语。至于字符集,Raku 提供了基于Unicode 属性的字符集。Unicode 字母字符类使用 表示
<:Letter>
,其否定则通过添加!
感叹号表示,如下所示:<:!Letter>
。有两个 Unicode 字母子类也很有用,<:Lu>
大写字母和<:Ll>
小写字母。如果您有需要删除的空白行,您可以切换到
-ne
非自动打印的逐行标志,如下所示:还有一些其他的正则表达式选项...Raku 还提供了 预定义的字符类,例如
<alpha>
类,其中包括"alphabetic characters plus underscore (_)"。很容易记住,在 Raku 中,<alnum>
等于<alpha>
plus<digits>
。对于此类别中的字符集的注意事项,否定用前导-
减号表示:上面正确处理了示例文件(包括 Unicode),但倒数第三行
_!_Abc
保持不变,最后一行_Åbc
保持不变。要删除这些前导_
下划线,下面的替换代码可以工作(尽管在顶部使用 Unicode<:Letter>
类更简单,因为该类不包含_
下划线):最后,如果 OP 认为不会遇到 Unicode 字符,则
range
下面的简单字符(s)起作用(同样,带有前导-
减号表示否定):但是请注意,上面的代码虽然很容易掌握,但不会正确处理 Sample Input 文件的最后两行,而是返回
bc
而不是(可能)期望的Åbc
.https://docs.raku.org/language/regexes
https://raku.org
没有工具,但只有
bash
功能:tr
d
删除c
你说的字符集的补充:perl
音译: