问题描述
我正在尝试编写一个脚本来交换文件中的文本:
I'm trying to write a script to swap out text in a file:
sed s/foo/bar/g myFile.txt > myFile.txt.updated
mv myFile.txt.updated myFile.txt
sed s/foo/bar/g myFile.txt > myFile.txt.updated
mv myFile.txt.updated myFile.txt
我调用了 sed 程序,它会换出 myFile.txt 中的文本并将更改后的文本行重定向到第二个文件.mv 然后将 .updated txt 文件移动到 myFile.txt,覆盖它.该命令在 shell 中有效.
I evoke the sed program, which swaps out text in myFile.txt and redirects the changed lines of text to a second file. mv then moves .updated txt file to myFile.txt, overwriting it. That command works in the shell.
我写道:
#!/bin/sh
#First, I set up some descriptive variables for the arguments
initialString="$1"
shift
desiredChange="$1"
shift
document="$1"
#Then, I evoke sed on these (more readable) parameters
updatedDocument=`sed s/$initialString/$desiredChange/g $document`
#I want to make sure that was done properly
echo updated document is $updatedDocument
#then I move the output in to the new text document
mv $updatedDocument $document
我收到错误:
mv: 目标`myFile.txt' 不是目录
mv: target `myFile.txt' is not a directory
我知道它认为我的新文件的名称是 sed 输出的字符串的第一个单词.我不知道如何纠正.从早上 7 点开始,我一直在尝试每个报价,创建一个临时文件来存储输出(灾难性的结果),IFS...到目前为止的一切都给了我越来越多的无益错误.我需要清醒一下,我需要你的帮助.我该如何解决这个问题?
I understand that it thinks my new file's name is the first word of the string that was sed's output. I don't know how to correct that. I've been trying since 7am and every quotation, creating a temporary file to store the output in (disastrous results), IFS...everything so far gives me more and more unhelpful errors. I need to clear my head and I need your help. How can I fix this?
推荐答案
也许试试
echo $updatedDocument > $document
这篇关于在 shell 脚本中重定向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!