이 문자열을 바꾸고 싶습니다.
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를 다르게 취급합니다.?