질문이 있어요sed, 그것을 사용할 때에스'(검색 및 바꾸기 명령) 및 '이자형' 플래그(예:
sed 's/.../.../e'
문제는 표준 입력의 문자 $
, 및 (
가 혼동되는 것 같다는 것입니다.)
나의 첫 만남여기이제 다음과 같이 요약됩니다.
echo '$-' | sed 's/x//e' # works when pattern is NOT matched
$-
echo '$-' | sed 's/-//e' # fails when pattern is matched: gags on $
sh: $: command not found
echo '-' | sed 's/-//e' # works when $ isn't present
echo '-(' | sed 's/-//e' # Also fails when '(' or ')' are found
sh: -c: line 1: syntax error: unexpected end of file
echo '(' | sed 's/-//e' # But works with this
(
echo '$-' | sed 's/-/echo xx/e' # also fails
sh: xx: command not found
echo '$-' | sed 's/\(-\)/echo '\1'/e' # also fails
sh: 1: command not found
이게 뭐야?GNU 매뉴얼설명하다:
3.3초 명령
...
s 명령 뒤에는 다음 플래그 중 0개 이상이 올 수 있습니다.
...
이자형
이 명령을 사용하면 쉘 명령의 입력을 패턴 공간으로 파이프할 수 있습니다. 대체가 이루어지면 패턴 공간에 있는 명령이 실행되고 해당 출력이 패턴 공간을 대체합니다. 후행 줄 바꿈은 억제됩니다. 실행할 명령에 NUL 문자가 포함되어 있으면 결과가 정의되지 않습니다. 이것은 GNU sed 확장입니다.
bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
sed --version
sed (GNU sed) 4.7
Packaged by Debian
내가 무엇을 놓쳤거나 잘못했나요?
답변1
달리기
echo '$-' | sed 's/-//e'
-
에서 제거 $-
하고 그대로 두면 $
결과는 셸 명령으로 실행됩니다 /e
.
$
명령줄에서 실행해 보면 결과는 동일합니다.
sh: $: command not found
다른 모든 라인도 비슷합니다.