我的文件中有以下内容
foobar bar
bar foo foo
bar bar foobar
我想获取所有行中的最后一个字符,也是最后 3 个字符。
我正在使用以下 for 循环解决方法来获得所需的输出,但我想cut
command 可以做得比这更好。有没有办法通过剪切来做同样的事情?
$ cat test.sh
FILE=$1
echo "Last chars:"
for i in $(cat $FILE)
do
echo ${i: -1}
# OR echo $i |tail -c 2
done
echo
echo "Last 3 chars:"
for i in $(cat $FILE)
do
echo ${i: -3}
# OR echo $i |tail -c 4
done
$ sh test.sh
Last chars:
r
r
r
o
o
r
r
r
Last 3 chars:
bar
bar
bar
foo
foo
bar
bar
bar
答案1
cut
本身没有一行中“最后 N 个字符”的概念。但是,如果您将其与rev
程序结合使用,您可以反转每一行,选择第一的N 个字符,然后反转结果以恢复原来的顺序。
rev | cut -c 1-3 | rev
答案2
如果在 GNU 系统上,您可能希望避免cut
仅适用于单字节字符的情况。
你可以使用sed
:
sed -n '/^.*\(...\)$/\1/p' < file
(在某些实现中跳过少于 3 个字符的行以及可能的非文本行)。
或者包含少于 3 个字符的行,仅打印其中的内容:
sed -n 's/.\{0,3\}$/\
&/; s/^.*\n//p' < file