내 파일에 다음 내용이 있습니다
foobar bar
bar foo foo
bar bar foobar
모든 줄의 마지막 문자(마지막 3자)를 얻고 싶습니다.
원하는 출력을 얻기 위해 다음 for 루프 해결 방법을 사용하고 있지만 cut
명령이 이보다 더 나은 결과를 얻을 수 있을 것 같습니다. Cut으로 동일한 작업을 수행할 수 있는 방법이 있습니까?
$ 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
cut
GNU 시스템을 사용하는 경우 단일 바이트 문자로만 작동하는 상황을 피하고 싶을 수도 있습니다 .
당신이 사용할 수있는 sed
:
sed -n '/^.*\(...\)$/\1/p' < file
(일부 구현에서는 3자 미만의 줄과 텍스트가 아닌 줄을 건너뜁니다.)
또는 3자 미만의 문자를 포함하는 줄로 해당 내용만 인쇄합니다.
sed -n 's/.\{0,3\}$/\
&/; s/^.*\n//p' < file