Mr.*_*ndo 4 grep awk command-line
我有一个总是 3 个字符的字符串......第一个和最后一个总是相同的。
例子:
???
有没有一种简单的方法只显示中间的那个?(这是唯一改变的)
Gil*_*not 11
是的,尝试这样做,然后选择您喜欢的方法 =) :
使用grep:
echo "ixi" | grep -oP "^.\K."
Run Code Online (Sandbox Code Playgroud)
带切:
echo "ixi" | cut -c2
Run Code Online (Sandbox Code Playgroud)
使用bash 参数扩展:
x='ixi'; echo ${x:1:1}
Run Code Online (Sandbox Code Playgroud)
使用sed:
echo "ixi" | sed 's/.\(.\)./\1/'
Run Code Online (Sandbox Code Playgroud)
或者
echo "ixi" | sed 's/\(^.\|.$\)//g'
Run Code Online (Sandbox Code Playgroud)
使用perl:
echo "ixi" | perl -lne 'print $& if /^.\K./'
Run Code Online (Sandbox Code Playgroud)
用红宝石:
echo "ixi" | ruby -ne 'print $_.split(//)[1]'
Run Code Online (Sandbox Code Playgroud)
使用awk:
echo 'ixi' | awk '{split($0, a, ""); print a[2]}'
Run Code Online (Sandbox Code Playgroud)
使用蟒蛇:
echo "ixi" | python -c 'print list("'$(cat)'")[1]'
Run Code Online (Sandbox Code Playgroud)
或者
python -c 'import sys; print list(sys.argv[1])[1]' ixi
Run Code Online (Sandbox Code Playgroud)
\K将匹配重新开始为零(参见pcre文档)$(cat) 在 python 中是一个 shell hack 来获取 STDIN您也可以使用sed代替grep:
sed 's/.\(.\)./\1/'
Run Code Online (Sandbox Code Playgroud)
这说:
s/... 匹配表达式到下一个/字符。. ...匹配第一个字符(任何)。\(.\) ...匹配下一个字符并记住它。. ...匹配第三个字符(任何)。/ ...表示表达式的结束。\1 ...替换与记住的字符匹配的整个字符串。/ ... 替换文本结束。因此:
$ echo "abc" | sed 's/.\(.\)./\1/'
Run Code Online (Sandbox Code Playgroud)
将打印:
b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10479 次 |
| 最近记录: |