sed
다음과 같이 할 수 있습니다 :
12345
다음과 같이 됩니다:
1&2&3&4&5
?
답변1
GNU 사용 sed
:
sed 's/./\&&/2g'
(s
대안( ) 앞에 동일한 ( g
)가 있는 모든 ( ) 문자는 ( )의 두 번째 발생부터 시작됩니다..
&
&
\&
2
가지고 다닐 수 있는:
sed 's/./\&&/g;s/&//'
(모든 항목을 교체하고 &
원하지 않는 첫 번째 항목을 삭제합니다).
일부 awk
구현의 경우(빈 FS의 동작이 지정되지 않았기 때문에 POSIX가 아님):
awk -F '' -v OFS="&" '{$1=$1;print}'
( gawk
그리고 다른 awk
구현들,빈 필드 구분 기호는 레코드를 문자 구성 요소로 분할합니다.. 이것출력 필드 구분 기호( OFS
)는 으로 설정됩니다 &
. (자체)에 값을 할당 $1
하여 레코드를 인쇄하기 전에 새 필드 구분 기호로 강제로 재생성합니다. 이 방법 NF=NF
도 작동하고 많은 awk 구현에서 약간 더 효율적이지만 현재 POSIX에서는 이 동작을 수행하는 방법을 지정하지 않습니다.
perl
:
perl -F -lape '$_=join"&",@F'
(-pe
각 코드 줄을 실행하고 결과를 인쇄합니다( $_
).-l
자동으로 줄 끝을 제거하고 다시 추가합니다.-a
@F
에 설정된 구분 기호의 입력 분할을 사용하여 채우기-F
, 여기에 빈 문자열이 있습니다. 결과적으로 각 문자가 분할된 @F
다음 '&'로 연결되고 해당 행이 인쇄됩니다. )
또는:
perl -pe 's/(?<=.)./&$&/g'
(앞의 모든 문자를 다른 문자로 바꿉니다(뒤돌아보기 정규식 연산자(?<=...))
zsh
쉘 연산자를 사용하십시오 :
in=12345
out=${(j:&:)${(s::)in}}
(다시, 매개변수 확장 플래그를 사용하여 빈 필드 구분 기호로 분할한 s::
다음 와 결합합니다 &
.)
또는:
out=${in///&} out=${out#?}
&
(ksh 연산자를 사용하여 (각 문자 앞의) 모든 항목을 대체하고 ${var//pattern/replacement}
( ksh
null 패턴에 다른 것이 있다는 것은 다른 것을 의미하지만 무엇이 있는지 잘 모르겠습니다) POSIX 스트리핑을 사용하여 bash
첫 번째 연산자를 제거합니다 ${var#pattern}
.
ksh93
쉘 연산자를 사용하십시오 :
in=12345
out=${in//~(P:.(?=.))/\0&}
( ~(P:perl-like-RE)
perl과 유사한 정규 표현식을 사용하기 위한 ksh93 glob 연산자(perl 또는 PCRE와는 다름), (?=.)
예측 연산자: 뒤에 다른 문자 자체가 오면 문자를 대체합니다( \0
) 및 &
)
또는:
out=${in//?/&\0}; out=${out#?}
?
(각 문자( )를 &
자체 문자( )로 바꾼 \0
다음 추가 문자를 삭제합니다.)
bash
쉘 연산자를 사용하십시오 :
shopt -s extglob
in=12345
out=${in//@()/&}; out=${out#?}
( 와 동일 zsh
하지만 거기에 있어야 합니다( @()
에서 ksh glob 연산자를 사용해야 함).extglob
bash
답변2
유닉스 유틸리티:
fold -w1|paste -sd\& -
설명하다:
"fold -w1"
- 각 입력 문자를 자체 줄로 묶습니다.
접기 - 지정된 너비에 맞게 각 입력 줄을 감습니다.
-w, --width=WIDTH는 80 대신 WIDTH 열을 사용합니다.
%echo 12345|fold -w1
1
2
3
4
5
"paste -sd\& -"
- 입력 라인을 함께 병합하여 &
구분 기호 로 사용
붙여넣기 - 파일 줄 병합
-s, --serial 병렬 대신 한 번에 하나의 파일을 붙여넣습니다.
-d, --delimiters=LIST 탭 대신 LIST의 문자를 재사용합니다.
%fold -w1|paste -sd\& -
1&2&3&4&5
(입력에 여러 행이 포함되어 있으면 결합됩니다 &
.)
답변3
사용sed
sed 's/./&\&/g;s/.$//'
답변4
이것은 다른 답변보다 약간 느리지만 명확합니다.
echo 12345 | perl -lnE 'say join "&", split //'