我有一个始终由 3 个字符组成的字符串...第一个字符和最后一个字符始终相同。
例子:
▅█
有没有一种简单的方法可以只显示中间的一个?(唯一改变的一个)
答案1
是的,尝试这样做,然后选择您喜欢的方法=):
和grep:
echo "ixi" | grep -oP "^.\K."
和切:
echo "ixi" | cut -c2
和狂欢 参数扩展:
x='ixi'; echo ${x:1:1}
和sed:
echo "ixi" | sed 's/.\(.\)./\1/'
或者
echo "ixi" | sed 's/\(^.\|.$\)//g'
和perl:
echo "ixi" | perl -lne 'print $& if /^.\K./'
和红宝石:
echo "ixi" | ruby -ne 'print $_.split(//)[1]'
和awk:
echo 'ixi' | awk '{split($0, a, ""); print a[2]}'
和Python:
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 "(?<=^.)."