使用Sed获取第N个字符

5
我正在玩《最终幻想7》,我现在在新兵校舍的图书室里,需要写下每本书的第N个字母(减去空格),其中N是书名前面的数字,并打印出所有不属于当前房间的书籍的标题和其名称中的第N个字母。共有四本这样的书。
我需要一个sed脚本或其他命令行来打印书名并获取其名称中的第N个字母。
2个回答

9
您不需要使用 sed。您可以使用 bash 字符串替换:
$ book="The Ancients in History"
$ book="${book// /}"   # Do global substition to remove spaces
$ echo "${book:13:1}"  # Start at position 13 indexed at 0 and print 1 character
H

1
有没有一种方法可以不将字符串存储到变量中来实现,比如"The Ancients in History": 13:1 - Alexej Magura

1
我弄清楚怎么做了:

echo "The Ancients in History" | sed -r 's/\s//g ; s/^(.{13})(.).*$/\2/'

=> H

注意
Sed从0开始计数,而不是1,所以如果你想要第14个字母,需要请求第13个字母。

这是一个shell脚本示例:

#!/bin/sh

if [[ -n "$1" ]]; then # string 

    if [[ -n "$2" ]]; then # Nth 

        echo "Getting character" $[$2 - 1]

        export Nth=$[$2 - 1]

        echo "$1" | sed -r "s/\s//g ; s/^(.{$Nth})(.).*$/\2/";
    fi
fi

1
也许你的意思是sed删除前13个字母,下一个字母是第14个。 - potong
@potong:是的,我本来更愿意使用_print_函数,但我无法弄清楚如何让它按照我的意愿工作... - Alexej Magura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接