sed
일부 문자를 제거하고 결과를 변수로 반환하는 데 사용하려고 합니다 . 그러나 나는 그것을 작동시킬 수 없는 것 같습니다. 다음은 내가 시도한 것과 해당 오류가 발생하는 것입니다.
PROJECT_DB_NAME=`sed -i "${var}"'s/[^a-zA-Z]//g'`
실수 sed: -i는 stdin과 함께 사용할 수 없습니다.
PROJECT_DB_NAME=`"$var" | sed -n 's/[^a-zA-Z]//g'`
실수 domain.com: 명령을 찾을 수 없습니다
나는 많은 예를 찾았지만 그 중 어느 것도 내가 원하는 것을 정확히 수행하지 않으며 나는 약간 멍청한 놈입니다. 감사해요
답변1
sed
의 변수 값에서 알파벳이 아닌 문자를 제거할 필요가 없습니다 bash
. 간단한 변수 대체도 동일한 작업을 수행합니다.
PROJECT_DB_NAME=${var//[![:alpha:]]}
[!a-zA-Z]
대신 사용하고 싶다면 [![:alpha:]
확실히 가능합니다.
외부 명령을 사용하여 이러한 문자를 제거하려면 해당 작업(단일 문자 음역)을 정확하게 수행하는 보다 간단한 명령을 tr
대신 사용하십시오.sed
tr
PROJECT_DB_NAME=$( tr -dc '[:alpha:]' <<<"$var" )
또는,
PROJECT_DB_NAME=$( printf '%s\n' "$var" | tr -dc '[:alpha:]' )
이 명령에 대한 설명서를 참조하십시오 tr
.
를 사용하면 변수 echo
가 표시되기 전에 변수의 내용이 변경될 수 있습니다 sed
. 질문 참조 "왜 printf가 echo보다 나은가요?".
첫 번째 코드 조각,
PROJECT_DB_NAME=`sed -i "${var}"'s/[^a-zA-Z]//g'`
파일 이름 없이 실행됩니다 sed
. 이는 sed
데이터가 표준 입력을 통해 도착한다고 가정합니다. 오류 메시지에서 알 수 있듯이 이 -i
옵션은 표준 입력과 함께 사용할 수 없습니다. 또한 sed
코드 앞에 변수 값을 추가할 수 있습니다. 이렇게 하면 변수 값이 sed
편집 명령으로 해석됩니다.
두 번째 코드 조각,
PROJECT_DB_NAME=`"$var" | sed -n 's/[^a-zA-Z]//g'`
"$var"
이는 파이프의 왼쪽에 있는 명령으로 실행을 시도합니다. 또한 sed -n
이를 사용하면 다음과 같은 결과가 sed
발생합니다.아니요수정된 데이터는 기본적으로 출력됩니다.
답변2
음, 여기서 답을 찾았습니다. sed의 결과를 변수에 할당하는 방법
이 답변을 보았지만 결국 잘못 구현했습니다. 그래서 이것이 내가 끝내는 것입니다 :
PROJECT_DB_NAME=$( echo "$var" | sed 's/[^a-zA-Z]//g')