나는 어떤 문장이라도 뒤집을 수 있다는 것을 알고 있습니다.
echo "a,b,c,d" | rev
하지만 문장의 첫 부분만 바꾸고 싶다면 어떻게 해야 할까요?
echo "a,b,c,d Access" | rev
나는 이것을 얻습니다 :
sseccA d,c,b,a
, 제가 정말로 원하는 것은 다음과 같습니다.
d,c,b,a Access
어떻게 해야 하나요?
답변1
한 가지 방법은 다음을 사용하여 read
줄을 첫 번째 단어로 나누고 나머지 단어로 나누는 것입니다.rev
$ echo "a,b,c,d Access" | { read -r first rest; printf '%s %s\n' "$(rev <<< "$first")" "$rest"; }
d,c,b,a Access
답변2
그리고 sed
:
sed 's/^/ /;:1
s/^\([^ ]*\) \([^ ]\)/\2\1 /;t1
s/ //'
그리고 perl
:
perl -pe 's/\S+/reverse $&/e'
그리고 zsh
:
string='a,b,c,d Access'
setopt extendedglob
result=${string/(#m)[^ ]#/${(j::)${(Oas::)MATCH}}}
답변3
사용 pee
(티)부터더 많은 유틸리티( apt-get install moreutils
):
echo -n "a,b,c,d Access" | pee "cut -d ' ' -f 1 | rev" "cut -d ' ' -f 2" | tr '\n' ' '
결과는 d,c,b,a Access
번역된 개행 문자에서 나오는 후행 공백입니다.
답변4
일방 perl
통행:
$ echo "a,b,c,d Access" | perl -anle 'print ~~reverse($F[0])," @F[1..$#F]"'
d,c,b,a Access