sed 명령을 사용하여 변수 반환

sed 명령을 사용하여 변수 반환

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대신 사용하십시오.sedtr

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')

관련 정보