이 스크립트가 있습니다.
replace 3
echo 12345 | sed "s/^\(.\){"$1"}/\1hi/"
나는 또한 이것을 시도했습니다 :
echo 12345 | sed "s/^\(.{"$1"}\)/\1hi/"
이 경우 스크립트에서 "12345"(123hi45)의 처음 3자 뒤에 "hi"를 추가하고 싶습니다. 이는 스크립트이므로 "3"은 매개변수이며 변경될 수 있습니다. 난 정말 여기에 갇혀있습니다. 미리 감사드립니다!
답변1
중괄호를 벗어나면 명령이 작동합니다( $1
알 수 없는 이유로 따옴표 없이 인용하고 있습니다).
$ set -- 3
$ echo 12345 | sed "s/^\(.\{$1\}\)/\1hi/"
123hi45
반복 수정 {n}
자는확장하다정규식 수정자, 여기서기초적인정규식은 다음과 같이 작성됩니다 \{n\}
. sed
유틸리티는 기본적으로 기본 정규식을 사용합니다.
일부 문자를 다음과 같이 다시 작성하여 저장할 수 있습니다.
echo 12345 | sed "s/^.\{$1\}/&hi/"
개인적으로는 다른 접근 방식을 취하겠습니다.
hi
세 번째 문자 뒤에 문자열을 추가하려고 합니다 12345
. 여기서 "세 번째"는 의 값으로 지정됩니다 $1
.
echo 12345 | sed 's/./&hi/'"$1"
이면 표현식 은 다음과 같습니다 $1
.3
sed
s/./&hi/3
이는 세 번째 일치 항목(모든 문자)을 .
동일한 문자( &
대체 항목에 포함된 내용)로 바꾸고 hi
.
이와 같이 명령 끝에 숫자를 배치하면 n
해당 패턴의 :번째 발생이 대체됩니다.s
sed
sed
n
테스트 실행(가독성을 위해 입력이 수정되고 대체됨):
$ set -- 3
$ echo abcde | sed 's/./&<hi>/'"$1"
abc<hi>de
$ set -- 4
$ echo abcde | sed 's/./&<hi>/'"$1"
abcd<hi>e
$ set -- 1
$ echo abcde | sed 's/./&<hi>/'"$1"
a<hi>bcde
답변2
다음은 나에게 효과적이었습니다.
#!/bin/sh
n=$1
echo 12345 | sed -r "s/(^.{$n})/\1hi/"
-r
확장 정규 표현식(macos의 경우)을 지정하려면 sed 옵션을 사용해야 합니다 -E
. 귀하의 입력이 스크립트( )에 어떻게 들어갈지 잘 모르겠 12345
으므로 귀하의 예에 있는 그대로 두겠습니다.