이 명령 sed 's/~/ /g'는 무엇을 합니까?

이 명령 sed 's/~/ /g'는 무엇을 합니까?

처음에는 6개의 매개변수 세트를 스크립트에 전달했습니다.

Script.sh a b c d e f

스크립트에서 매개변수를 관리하는 명령 중 하나입니다.

comm=$(echo $1 |sed 's/~/ /g')

답변1

sed표현식은 s/~/ /g각 물결표 문자를 공백 문자로 바꿉니다. 말 그대로 " ~전체적으로(전체 입력 줄에서) 정규식과 일치하는 모든 항목을 공백으로 바꿉니다"를 의미합니다 . 이 경우 표현은 "faster"로 쓸 수도 있고 y/~/ /전체 sed명령을 "faster"로 바꿀 수도 있습니다 tr '~' ' '.

이 작업은 다음에서 bash보다 효율적으로 수행될 수 있습니다 .

comm=${1//\~/ }

~현재 사용자 홈 디렉토리의 경로 이름이 확장되지 않도록 하려면 여기서 이스케이프하거나 따옴표로 묶어야 합니다 .

어떤 경우든 $1이를 사용하려면 큰따옴표로 묶어야 하며 echo(쉘 글로브가 파일 이름으로 확장되기를 원하지 않는 한) 이상적으로는 명령이 작성됩니다 printf(이렇게 하면 초기 대시가 $1명령문에서 무언가로 해석되는 것을 방지할 수 있습니다). 일부 옵션의 시작 부분 echo, 경우에 따라 특정 백슬래시 시퀀스를 해석하는 것을 피하기 위해):

comm=$( printf '%s\n' "$1" | tr '~' ' ' )

관련된:

관련 정보