입력 파일이 아닌 리터럴 문자열로 sed


96

이것은 간단해야 합니다. 입력 파일이 아닌 리터럴 문자열에 대해 sed 를 실행하고 싶습니다 . 이유가 궁금하다면 예를 들어 텍스트 데이터가 아닌 변수에 저장된 값을 편집하는 것입니다.

내가 할 때 :

sed 's/,/','/g' "A,B,C"

여기서 A, B, C는 A ','B ','C로 변경하려는 리터럴입니다.

나는 얻다

Can't open A,B,C

마치 A, B, C가 파일이라고 생각하는 것처럼.

나는 그것을 에코하기 위해 파이핑을 시도했다.

echo "A,B,C" | sed 's/,/','/g' 

나는 프롬프트를 받는다.

그것을하는 올바른 방법은 무엇입니까?

답변:


151

작은 따옴표 충돌이 있으므로 다음을 사용하십시오.

 echo "A,B,C" | sed "s/,/','/g"

사용하는 경우 , 당신도 할 수 있습니다 ( <<<is a here-string) :

sed "s/,/','/g" <<< "A,B,C"

하지만

sed "s/,/','/g"  "A,B,C"

sed파일을 인수로 기대 하기 때문에

수정 :

당신이 사용한다면 또는 다른 것 :

echo string | sed ...

1
이상한, 즉 문제의 경우 몇몇이 게시 한 전 시간,하지만 이상한 중단의 실현 ... 나를 위해 일을하지 않습니다
슈퍼 히어로

10

원하는대로 작동합니다.

echo "A,B,C" | sed s/,/\',\'/g

5

bash 스크립트에서 변수를 사용하는 내 버전 :

백 슬래시를 찾아 슬래시로 바꿉니다.

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.