使用 grep 显示字符串中的第二个字符?

使用 grep 显示字符串中的第二个字符?

我有一个始终由 3 个字符组成的字符串...第一个字符和最后一个字符始终相同。

例子:

▅█

有没有一种简单的方法可以只显示中间的一个?(唯一改变的一个)

答案1

是的,尝试这样做,然后选择您喜欢的方法=):

echo "ixi" | grep -oP "^.\K."

echo "ixi" | cut -c2

参数扩展

x='ixi'; echo ${x:1:1}

echo "ixi" | sed 's/.\(.\)./\1/'

或者

echo "ixi" | sed 's/\(^.\|.$\)//g'

echo "ixi" | perl -lne 'print $& if /^.\K./'

echo "ixi" | ruby -ne 'print $_.split(//)[1]'

echo 'ixi' | awk '{split($0, a, ""); print a[2]}'

echo "ixi" | python -c 'print list("'$(cat)'")[1]'

或者

python -c 'import sys; print list(sys.argv[1])[1]' ixi

笔记

  • \K重新开始比赛(见pcre文档)
  • $(cat)在 python 中有一个 shell hack 可以获取STDIN

答案2

        ︙
或者

echo "ixi" | awk '{print substr($0,2,1)}'

或者

expr "ixi" : '.\(.\).'

答案3

为了多样化,这里有一种方法dd

echo ixi | dd bs=1 skip=1 count=1 2>/dev/null

如果你的 grep 不支持 perl ( -P),你可以这样做:

echo ixi | grep -o . | sed -n 2p

这些替代方法仅适用于单行输入。

答案4

你也可以这样做,通过使用环顾四周的技术,所以第二个字符“x”按照上面使用“ixi”的例子,

echo ixi | grep -oP "(?<=^.)."

相关内容