문자열의 각 문자 앞과 마지막 문자 뒤에 "/"를 추가합니다.

문자열의 각 문자 앞과 마지막 문자 뒤에 "/"를 추가합니다.

다음과 같이 Python을 사용하여 이 작업을 sed수행 할 awk수 있습니다 unix./u/n/i/x/

separator='/'
separator.join(string)+separator

하지만 쉘에서 이를 어떻게 달성할 수 있을까요?

답변1

$ echo unix | sed -e 's,.,&/,g' -e 's,^,/,'
/u/n/i/x/

이는 다음과 유사합니다.예유님의 답변, 그러나 두 표현식을 sed모두 실행하여 호출을 제거하고 sed명령에 대한 대체 구분 기호로 쉼표를 사용하여 사용되는 정규식을 단순화합니다 s///.

여기에 사용된 첫 번째 대체는 입력 문자열의 각 문자를 그 자체로 바꾸고 그 뒤에 한 /문자가 옵니다. 두 번째 대체는 /문자열의 시작 부분에 a를 삽입합니다.

명령 sed은 로 단축될 수 있습니다 sed 's,.,&/,g; s,^,/,'. 즉, 로 구분된 두 대체 항목을 모두 포함하는 단일 인수를 사용합니다 ;.


GNU를 사용하면 sed다음과 같은 작업도 수행할 수 있습니다.

$ echo unix | sed 's,.\{0\},/,g'
/u/n/i/x/

정확히 .\{0\}0개의 문자와 일치합니다. GNU는 sed이 표현식이 문자열의 모든 문자 사이에서 일치하도록 합니다. 다른 sed구현에서는 이를 오류로 간주할 수 있습니다. 여기, OpenBSD sed:

$ echo unix | sed 's,.\{0\},/,g'
sed: 1: "s,.\{0\},/,g": RE error: empty (sub)expression

답변2

echo "unix" | sed -e 's/\(.\)/\/\1/g' | sed -e 's/$/\//'

산출:

/u/n/i/x/

답변3

모든 Unix 시스템의 모든 쉘에서 awk를 사용하십시오.

$ echo 'unix' | awk '{gsub(/./,"/&"); print $0"/"}'
/u/n/i/x/

답변4

sed를 사용하는 한 가지 방법은 끝에 개행 문자를 추가하는 것입니다.

$ echo Unix | sed -n 'G;s|.|/&|g;P'
/U/n/i/x/

다음 방법도 사용할 수 있습니다. 둘 다 awk n sed의 GNU 버전을 사용합니다.

$ echo Unix | sed -e 's/./\n&/g;G' | paste -sd'/'
$ echo Unix | awk '{$1=OFS $1}++NF' FPAT=. OFS=/

sed 편집자를 위한 최고의 리소스는 Dale Dougherty et al의 O'Reillys' sed n awk입니다. 또한 이와 같은 더 많은 sed 그룹에 가입하여 다른 사람들의 방법을 배우면 더 빠르게 적응할 수 있습니다.

관련 정보