查找并打印出字符串中特定字符的出现次数 (shell/AIX)

Posted

技术标签:

【中文标题】查找并打印出字符串中特定字符的出现次数 (shell/AIX)【英文标题】:Find and print out occurrences of a specific character in a String (shell/AIX) 【发布时间】:2017-03-01 05:43:12 【问题描述】:

我有以下问题。在shell脚本中,我需要找出字符串中多个点('.')的位置。

我找到了一些解决方案,但问题是,它们可以在 Linux shell 上运行,但不能在 AIX shell 上运行。

示例: 字符串看起来像这样:someString-10.12.16.somestring.sql (是的,它是一个文件名)

我用 grep 试过了: echo $string | grep -aob '\.' | sed -n '2p' | cut -c 1-2) 但是AIX下的grep不支持选项-ob

我用 sed 试过了:sed 's/\([^\.]*\..*\)\..*/\1/' | wc -c 但是在那里,我收到错误消息:sed: Function s/\([^\.]*\..*\)\..*/\1/ cannot be parsed

谁能给我一个在 AIX shell 中运行的解决方案? 对于每个点,一个返回该点位置的命令。

谢谢你:-)

【问题讨论】:

您的预期结果到底是什么?您发布的示例仅返回第二次出现。您需要所有事件的列表吗?我不确定“对于每个点,一个返回该点位置的命令”是什么意思。 不,我不需要出现的列表。我需要一个命令,将位置作为特定点/句点的数字。我现在找到了解决方案:echo "someString.0.4.text" | tr . '\n' | sed -n '2p' | wc -c 但是 wc -c 命令在返回值之前打印了一些空格,这是为什么呢?稍后我会将它们剪掉并打印我的完整解决方案。 【参考方案1】:

你可以试试这些;

to 返回第一个点的位置:(索引从 1 开始,而不是 0;)

 echo `expr match "someString-10.12.16.somestring.sql " '[a-z:A-Z:0-9:-]*.'`

第二个点;

echo `expr match "someString-10.12.16.somestring.sql " '[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.'`

第三个点;

echo `expr match "someString-10.12.16.somestring.sql" '[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.'`

最后一个点;

echo `expr match "someString-10.12.16.somestring.sql" '[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.'`

例如;

user@host:>echo `expr match "someString-10.12.16.somestring.sql" '[a-z:A-Z:0-9:-]*.'` &&
> echo `expr match "someString-10.12.16.somestring.sql" '[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.'` &&
> echo `expr match "someString-10.12.16.somestring.sql" '[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.'` &&
> echo `expr match "someString-10.12.16.somestring.sql" '[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.[a-z:A-Z:0-9:-]*.'`

14
17
20
31


user@host:>echo `expr match "123.567.90." '[0-9]*.'`
4
user@host:>echo `expr match "123.567.90." '[0-9]*.[0-9]*.'`
8
user@host:>echo `expr match "123.567.90." '[0-9]*.[0-9]*.[0-9]*.'`
11

【讨论】:

以上是关于查找并打印出字符串中特定字符的出现次数 (shell/AIX)的主要内容,如果未能解决你的问题,请参考以下文章

如何在NSString中查找特定字符的出现次数是大写的?

输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数

输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数

js查找字符串中重复最多的字母

16.查找特定字符出现的次数

P1308(字符串类,处理字符串查找)