我是一个shell脚本的新手,不清楚如何使用sed
或其他工具将文本文件中的第一行替换为特定字符串。以下是文本文件内容:
/home/snehil/Desktop/j1/movie.MOV "一些其他文本行"
我想用movie.MOV
(可以是shell脚本中的变量)来替换第一行(电影文件路径)。
请指导我如何做到这一点。我在一些帖子中看到了sed
,我需要在这里使用sed
吗?
sed是正确的工具,尝试执行:
var="movie.MOV"
sed -i "1s/.*/$var/" file.txt
解释
1
表示第一行s///
: 我们用变量 $var
替换所有内容 (.*)学会如何在 shell 中正确引用,这非常重要:
对于包含空格/元字符和每个扩展的字面值,请“双引号”:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
。对于代表代码或字面值的单个 $,请使用'单引号'
:$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
。参见:
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words
#I want to replace the first line
cp test.txt test.txt.backup
echo 'mynewfirstline'> test.txt
#add everything from old file starting from second line
cat test.txt.backup |tail -n+2>> test.txt
1s:.*/::
来除去除文件名以外的所有内容。 - Dietrich Eppsed
命令的-i
选项来直接编辑文件,例如:sed -i '.bak' "1s/.*/${var}/" file.txt
这将会直接在文件中进行编辑,并且创建一个备份文件(.bak
)。如果您不需要备份文件,则只需将-i
选项的参数留空即可,示例代码如下:sed -i '' "1s/.*/${var}/" file.txt
- Sam Figueroa