首页 > 解决方案 > 打印字符串中的字符

问题描述

我有一个包含单词的文件-abfiuf.com abdbhj.co.in abcahjkl.org.in.2 abciuf zasdg cbhjk asjk

包括其他内容。我的要求是-以abfiuf开头的词,

abdbhj, abcahjkl, abciuf ,.... cut the two character from middle like below.
abfiuf - fi
abdbhj - db
abjcahjkl - ca
abciuf - ci

我在下面尝试过-首先要获得匹配的单词-

cat /etc/xyz.txt|grep -Eo \<(abfiuf|abdbhj|abjcahjkl|abciuf)\S*'|cut -f1 -d"."

但无法从 words 中匹配 "fi" 、 "db" 、 "ca" 、 "ci" 前后进行剪切。

尝试使用 sed 命令 - sed 's/^.*fi/fi/'-> 仅适用于之前删除的一个单词。但是如何从单词中剪切多个字符之前和之后?

标签: bashawksed

解决方案


EDIT2:由于 OP 告诉他/她只想打印匹配的字符串值,只有在这种情况下,所以应该尝试遵循。

awk 'match($0,/fi|db|ca|ci/){print substr($0,RSTART,RLENGTH)}'  Input_file

或者,如果您想打印一条带有未找到任何匹配项的行号的消息,请尝试以下操作。

awk 'match($0,/fi|db|ca|ci/){print substr($0,RSTART,RLENGTH);next} {print "Line number " FNR " is NOT having any matching value in it."}' Input_file


如果是这种情况,假设您只需要打印第 3 和第 4 个字符,请尝试以下操作。

awk '{print substr($0,3,2)}' Input_file

编辑:现在我假设您不想硬编码要从行打印的位置,如果是这种情况,然后尝试遵循,它将首先计算行的长度并从其中间字母开始打印 2 个字符。

awk '{len=length($0)/2;print substr($0,len,2)}' Input_file

推荐阅读