使用 cut 打印文件中所有行的最后 N 个字符

使用 cut 打印文件中所有行的最后 N 个字符

我的文件中有以下内容

foobar bar
bar foo foo
bar bar foobar

我想获取所有行中的最后一个字符,也是最后 3 个字符。

我正在使用以下 for 循环解决方法来获得所需的输出,但我想cutcommand 可以做得比这更好。有没有办法通过剪切来做同样的事情?

$ 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

相关内容