다음과 같이 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 그룹에 가입하여 다른 사람들의 방법을 배우면 더 빠르게 적응할 수 있습니다.