sed에서 문자열을 달러 기호로 바꾸는 방법은 무엇입니까?

sed에서 문자열을 달러 기호로 바꾸는 방법은 무엇입니까?

이 문자열을 바꾸고 싶습니다.

export TODO_FILE="$TODO_DIR/todo.txt

그리고:

export TODO_FILE="$TODO_DIR/writing.txt"

파일에 ~/.todo/config. 나는 그것을 실행했습니다 :

sed -i 's/export TODO_FILE="$TODO_DIR/todo.txt"/export TODO_FILE="$TODO_DIR/writing.txt"/g' ~/.todo/config

그러나 그것은 말한다:

sed: -i may not be used with stdin

어떻게 해야 합니까?

답변1

이렇게 해 보세요(Chris, 당신은 꽤 가까워요):

sed -i '' 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config

답변2

먼저 라인을 맞추고 그 부분을 교체하는 것이 좋습니다

sed -i '/export TODO_FILE/ s/todo.txt/writing.txt/' ~/.todo/config

경로 변수가 너무 길면 매우 짧아집니다.

이전 답변에서 언급했듯이 경로를 처리할 때 다른 구분 기호를 사용하세요.

답변3

나는 작은 따옴표 안에 있기 때문에 문제가 달러 기호라고 생각하지 않습니다. bash를 사용한다고 가정하면,작은따옴표 내 문자열의 불변 확장.

문제 중 하나는 문자열 "/"에 있는 구분 기호("s" 명령 다음의 첫 번째 문자)를 찾거나 바꾸도록 선택했다는 것입니다. sed는 이를 예상한 것과 다르게 해석합니다. "|"와 같이 찾기/바꾸기 문자열에 나타나지 않는 다른 문자를 선택해야 합니다.

sed -i 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config

그러나 이는 특정 오류 메시지를 설명하지 않습니다.

어쩌면 BSD 버전을 사용하고 있을 수도 있습니다.분명히 -i를 다르게 취급합니다.?

관련 정보