この文字列を変更したいです。
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を使用すると仮定すると、一重引用符内の文字列の不変拡張。
問題の1つは、文字列 "/"の区切り文字( "s"コマンドの後の最初の文字)を検索または置換することを選択したことです。 sedはこれを予想したものとは異なる方法で解釈します。 「|」など、検索/置換文字列に表示されない他の文字を選択する必要があります。
sed -i 's|export TODO_FILE="$TODO_DIR/todo.txt"|export TODO_FILE="$TODO_DIR/writing.txt"|g' ~/.todo/config
ただし、これは特定のエラーメッセージを説明しません。
たぶんBSDバージョンを使用している可能性があります。明らかに-iを別の方法で扱います。?