查找并打印出字符串中特定字符的出现次数 (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)的主要内容,如果未能解决你的问题,请参考以下文章
输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数